2010-07-27 93 views
0

我在ABC.java中定义了公共枚举ABC,然后将它编译为ABC.class。Java枚举定义有什么问题

在另一个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是在../类/ teacherII/Semester.class。它在那之前我编译Questionnaire.java


非常感谢你们的回复。 正如Chris和Vineet所说的那样,季节就是这样,编译Questionnair时我没有设置类路径。现在有效。再次感谢你们!

+3

你可以发布你的代码吗? – danyim 2010-07-27 16:28:45

+0

源代码已添加。谢谢danyim。 – lonelyloner 2010-07-27 16:44:41

+1

这段代码在这里工作得很好(如果我在调查问卷中添加右大括号)。 – 2010-07-27 16:56:15

回答

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); 
    } 
} 
+0

您忘记更改第二个示例。 'x.ABCEnum'应该是'ABC.ABCEnum'。 – Mike 2010-07-27 16:40:42

+0

这个例子是错误的:根据这个问题,ABC枚举不是ABC类中的内部类,它只是一个枚举。 – Jorn 2010-07-27 17:12:53

+0

谢谢,迈克。我做了改变。 Jorn--我的意思是要表明ABC和XYZ是独立的文件,这就是原文的意思。 – danyim 2010-07-27 17:50:36

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

只是一个精度,编译A之后可以编译B,但是您必须将类路径设置为A.class所在的目录; 类似于:'javac -cp path_to_a B.java' – Kru 2010-07-27 18:41:58

0

代码没有问题。

在你的情况下,你会得到这个错误,因为你在编译它之前在另一个类中使用Enum。