繁体   English   中英

错误:找不到内部类的符号java

[英]error : cannot find symbol java for inner class

我正在自学使用java套接字编程,并且在编译 . 我在主类library_s声明了一个内部类Book并且编译器无法识别类Book定义的变量Status 我使用Book作为static class因为我读到枚举只存在于静态类中。 我想要一个类似于 C 中"struct"的模拟,因为我只熟悉它。 我查看了各种其他类似的错误,但没有一个有帮助。 请帮忙。 谢谢!

public class library_s extends Thread{

private ServerSocket lib_server;

LinkedList<Book> library = new LinkedList<Book>();

//constructor

  public library_s(int port) throws IOException{
    lib_server = new ServerSocket(port);
    lib_server.setSoTimeout(10000);
    }

public void run(){

Socket server = lib_server.accept();
    System.out.println("Connected to " + server.getRemoteSocketAddress());

    DataInputStream is = new DataInputStream(server.getInputStream());

    DataOutputStream os = new DataOutputStream(server.getOutputStream());

    for(library b : library){
      if(b.BookName == is.readUTF(){
           if(b.Status == FORISSUE){
         //enter rest of the body here
       }
      }

     }

   public static class Book{
    public String BookName;
    public static enum Status {FORISSUE, ISSUED, RENEW, RESERVE};

    public Book(String bn){
            this.BookName = bn;
            this.Status =   FORISSUE;
    }
}

public static void main(String [] args){
int port = Integer.parseInt(args[0]);
try{
    Thread t = new library_s(port);
    t.start();
} catch (IOException e){
    e.printStackTrace();
   }
  }
 }
}

编译器给出错误

library_s.java:64: error: cannot find symbol
    if(b.Status == FORISSUE){           
        ^
symbol:   variable Status
location: variable b of type Book
library_s.java:64: error: cannot find symbol
    if(b.Status == FORISSUE){           
                   ^

您在类Book声明了enum因此无法从外部(其他类)识别它。 为了修复它,可以像在包中的任何其他类一样声明library_s内部或外部Book的枚举,或者,如果您想将该枚举保留在类Book您可以使用以下方法访问它:

Book.Status.FORISSUE

您已声明类型Status ,但未声明该类型的变量。

在您的Book类中:

private Status status;

public Book( ... )
{
    // ...
    this.status = Status.FORISSUE;
}

在类之外,您必须使用Book.Status因为它是嵌套类型。 例如。

if( b.status = Book.Status.FORISSUE ) { ... }

StatusBook类中的嵌套enum类型,而不是字段。 您应该声明一个Status类型的字段。 构造函数中的赋值也很可疑。 您正在为枚举本身分配一个Status类型的值。 那不会编译。

Book类中声明一个变量为:

private Status status;

...并像这样使用它:

if (b.status == Book.Status.FORISSUE)

除此之外,您还有许多其他编译错误。 您的if块如下所示缺少右括号:

if(b.BookName == is.readUTF()

此外,您使用==来比较字符串,这不是编译错误,但在功能上肯定会失败。

另一件事是,您不需要声明您的enum static 默认情况下,嵌套枚举仅是static

最后,请遵循 Java 命名约定。 现在很难阅读您的代码。 类名应以大写字母开头,变量名应以小写字母开头。

我使用 Book 作为静态类,因为我读到枚举只存在于静态类中。

你从哪里读到的? 请引用您的来源。 您也可以在非静态类中声明enum

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM