我最近遇到了这个错误,我花了很长时间才弄明白。
我想我应该把它贴在这里以防其他人也可能遇到它,尽管这种情况的可能性可能非常低(见下文)。
最近开始在Java中使用enum,如下
public enum State {
ON, OFF
}
然后,在我从 Thread
扩展的对象中,有一个名为 state 的变量:
public class Example extends Thread {
private State state;
public Example() { state = State.OFF; } // initialize object at OFF state
然而,这会在编译时给出一个错误:
./Example.java:3: error: cannot find symbol
state = State.OFF;
^
symbol: variable OFF
location: class State
1 error
最佳答案
经过大约一个小时的努力,我找到了问题所在。
实际上有一个类名 State
是 Thread
对象的一部分。因此,当我调用 State.OFF
时,编译器正在寻找这个无法找到的状态。
您可以通过尝试去掉类声明中的 extends Thread
部分来解决这个问题,它会正常运行。如果您将 enum
类型的名称从 State
更改为其他名称,例如。 States
,那也可以。所以你只会在从 Thread 扩展并使用 State 作为名称时遇到这个问题。
仅供引用,您可以通过执行以下操作找出 Thread 对象的所有不同状态:
for (State s : State.values() {
System.out.println(s);
}
你会得到这样的东西:
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED
我必须说,对于像我这样的菜鸟来说非常有趣。
关于Java Enum 找不到符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828035/