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



我正在使用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_sBook之外声明枚举,就像你在包中的任何其他类中所做的那样,或者,如果你想在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的值赋给enum本身。不能编译。

Book类中声明一个变量:

private Status status;

…然后像这样使用:

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

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

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

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

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

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

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

你在哪里读到的?请注明出处。您也可以在非静态类中声明enum

最新更新