Java枚举定义有什么问题

时间:2010-07-27 16:26:50

标签: java enums compiler-errors

我在ABC.java中定义了公共枚举ABC,然后将其编译为ABC.class。

在另一个XYZ.java中,我使用私有ABC _abc

XYZ和ABC在某个包中。

但它告诉找不到符号类ABC

有什么问题?

package teacherII;

public enum Semester {

        Fall1999, Spring2000, Fall2000,
        Spring2001, Fall2001, Spring2002, Fall2002,
        Fall2003, Spring2004 
}

在另一个文件中,我使用

package teacherII;

public class Questionnaire {  
    private Semester _semester;

编译命令: javac -d ../classes/ Questionnaire.java

Semester.class位于../class/teacherII/Semester.class。在我编译Questionnaire.java

之前就在那里

非常感谢你们的回复。 本赛季就像克里斯和Vineet所说的那样,在编写Questionnair时我没有设置classpath。现在有效。再次谢谢你们!

3 个答案:

答案 0 :(得分:3)

看起来你没有正确编译。

你的枚举的定义看起来不错。您收到该错误消息的原因是,当您尝试编译第二个文件时,编译的(.class)文件不存在(或不可访问)。

所以,例如:

---- A.java ----
package a;
public enum A { one, two, three }
---- B.java ----
package a;
public class B {
   A x;
}

使用javac A.java B.java

编译就可以了

但它会失败,例如,你首先编译B.java:

javac B.java  
B.java:3: cannot find symbol
symbol  : class A
location: class a.B
   A x;
   ^
1 error

我认为发生了类似的事情。

所以,基本上在编译时检查你的类路径。

答案 1 :(得分:0)

您可能遇到问题,因为您将枚举标识符命名为与类标识符(ABC)相同,但如果您只是简化示例,则应该没问题。

要使用ABC,您需要引用ABC作为对象的实例,然后您就可以访问枚举器。

例如......

public class ABC {
    public enum ABCEnum { ..., ..., ... };

...

}

public class XYZ {
    public static void main(String args[]) {
        ABC x = new ABC();
        System.out.println(x.ABCEnum);
    }
}

但是,你也可以制作枚举static,这样你就不需要这样做了。

public class ABC {
    public static enum ABCEnum { ... };

...

}

public class XYZ {
    public static void main(String args[]) {
        System.out.println(ABC.ABCEnum);
    }
}

答案 2 :(得分:0)

您的代码没有问题。

在您的情况下,您会收到此错误,因为您在编译之前实际上正在另一个类中使用Enum。