3

我最近遇到了这个错误,我花了很长时间才弄清楚。

我想我应该把它贴在这里以防其他人也可能遇到它,尽管这种可能性可能非常低(见下文)。

我最近开始在Java中使用枚举,如下

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
4

1 回答 1

2

在为此苦苦挣扎了大约一个小时后,我发现了问题所在。

实际上有一个类名StateThread对象的一部分。因此,当我调用 时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

我必须说,对于像我这样的菜鸟来说,这很有趣。

于 2012-10-10T20:44:45.497 回答