Java Enum 找不到符号错误

标签 java

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

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

最近开始在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

最佳答案

经过大约一个小时的努力,我找到了问题所在。

实际上有一个类名 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

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

关于Java Enum 找不到符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828035/

相关文章:

java - Hibernate 查询给出 java.lang.IllegalArgumentException : node to traverse cannot be null

java - 如何使用 Eclipse 为诺基亚创建 J2ME midlet

java - Android 应用程序中的调试错误

java - `setBufferedSize()`方法有什么作用?

java - Android Holoeverywhere Proguard hell

java - 丢失日志 - log4j.xml 配置似乎被忽略 - Weblogic 9.2

java - 如何拯救带 child 的家长?

java - 一次从流中选取 2 个元素

Java HttpGet 不接受 gzip

java - 如何使用 Intellij Idea 远程调试 .jar 文件