3

私は最近、このエラーに遭遇し、理解するのにかなりの時間がかかりました。

可能性は非常に低いかもしれませんが、他の誰かがそれに遭遇する可能性がある場合に備えて、ここに投稿する必要があると思いました(以下を参照).

私は最近、次のようにJavaでenumを使い始めました

public enum State {
    ON, OFF
}

そして、から拡張された私のオブジェクトにThreadは、状態と呼ばれる変数があります:

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

これに約1時間苦労した後、私は問題を理解しました。

実際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

私のような新人にとってはかなり興味深いと言わざるを得ません。

于 2012-10-10T20:44:45.497 に答える