Java枚举定义出了什么问题

Java枚举定义出了什么问题,java,enums,compiler-errors,Java,Enums,Compiler Errors,我在ABC.java中定义了公共枚举ABC,然后将其编译为ABC.class 在另一个XYZ.java中,我使用私有ABC\u ABC XYZ和ABC在某个包中 但是它告诉找不到符号类ABC 怎么了 package teacherII; public enum Semester { Fall1999, Spring2000, Fall2000, Spring2001, Fall2001, Spring2002, Fall2002, Fall20

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

在另一个XYZ.java中,我使用私有ABC\u 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;
Compile命令:javac-d../classes/inventory.java

这个学期的班级在…/班/教师二/学期班。在我编译inventory.java之前,它就已经存在了



非常感谢你们的回复正如Chris和Vineet所说,这个季节是这样的,我在编写问卷时没有设置类路径。它现在起作用了。再次感谢你们

您可能会遇到问题,因为您将枚举标识符命名为与类标识符(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);
    }
}
但是,您也可以使enum
为静态的
,这样您就不需要这样做了

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

...

}

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

您可能会遇到问题,因为您将枚举标识符命名为与类标识符(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);
    }
}
但是,您也可以使enum
为静态的
,这样您就不需要这样做了

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

...

}

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

看起来您没有正确编译

枚举的定义看起来不错。您收到该错误消息的原因是,当您尝试编译第二个文件时,已编译的(
.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
我认为类似的事情正在发生在你身上


因此,基本上在编译时检查类路径

看来您没有正确编译

枚举的定义看起来不错。您收到该错误消息的原因是,当您尝试编译第二个文件时,已编译的(
.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
我认为类似的事情正在发生在你身上


因此,基本上在编译时检查类路径

您的代码没有问题


在您的例子中,出现此错误是因为您在编译Enum之前实际上正在另一个类中使用Enum。

您的代码没有问题


在您的例子中,之所以会出现此错误,是因为您在编译另一个类之前实际上正在使用Enum。

您忘记更改第二个示例
x.ABCEnum
应该是
ABC.ABCEnum
。这个例子是错误的:根据问题,ABC枚举不是ABC类内部的一个类,它只是一个枚举。谢谢,迈克。我做了改变。Jorn——我的意思是要说明ABC和XYZ是独立的文件,这正是原始帖子所暗示的。您忘了更改第二个示例
x.ABCEnum
应该是
ABC.ABCEnum
。这个例子是错误的:根据问题,ABC枚举不是ABC类内部的一个类,它只是一个枚举。谢谢,迈克。我做了改变。Jorn——我的意思是要说明ABC和XYZ是独立的文件,这正是原始帖子所暗示的。添加了源代码。谢谢danyim。这个代码在这里很好用(如果我在调查问卷中添加右括号)。发布的代码应该不会引起问题。我认为您的构建类路径不正确。你可能会发布你用来编译这些类的命令吗?另一件事:你的学期列表是固定的吗?或者你打算增加更多的学期?在这种情况下,您应该考虑使用另一个结构作为<代码>枚举< /COM>用于不改变的固定枚举。您可以将其转换为一个类
学期
,其成员类型为
枚举季节
(或类似类型),有两个值
秋季
春季
,以及
国际年
。如果此学期列表不会更改,请忽略我的评论。已添加源代码。谢谢danyim。这个代码在这里很好用(如果我在调查问卷中添加右括号)。发布的代码应该不会引起问题。我认为您的构建类路径不正确。你可能会发布你用来编译这些类的命令吗?另一件事:你的学期列表是固定的吗?或者你打算增加更多的学期?在这种情况下,您应该考虑使用另一个结构作为<代码>枚举< /COM>用于不改变的固定枚举。您可以将其转换为一个类
学期
,其成员类型为
枚举季节
(或类似类型),有两个值
秋季
春季
,以及
国际年
。如果学期列表不会改变,请忽略我的评论。只是为了精确起见,您可以在编译a后编译B,但必须将classpath设置为a.class所在的目录;类似于:
javac-cp path_to_a B.java
只是为了精确起见,您可以在编译a之后编译B,但必须将classpath设置为a.class所在的目录;类似于:
javac-cp path\u to\u a B.java