3

解決方法がわからないという非常に奇妙なエラーに遭遇しました。

Windows では正常にコンパイルされるプロジェクトが、Linux ではコンパイルされず、次のエラーが発生します。

タイプ AClass.Bbb の値をオンにすることはできません。変換可能な int 値、文字列、または列挙型変数のみが許可されます
、記載された型列挙型であっても。

クラスのコードは、次の行に沿ったものです。

public class AClass {
    private enum Bbb {
        ONE,
        TWO;
    }
    public void aMethod(List<Bbb> arg) {
        for (Bbb en : arg) {
            switch (en) {
                ....
            }
        }
    }
}

enin には下線が引かれ、上記switch(en)のエラー通知が表示されます。

他の誰かが持っていましたか?これを解決する方法はありますか?

UPD Java バージョン:

Java バージョン「1.7.0_25」
Java(TM) SE ランタイム環境 (ビルド 1.7.0_25-b15)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 23.25-b01、混合モード)
4

3 に答える 3

3

JDK1.7 を使用している場合、問題は解決するはずです。以下の手順に従ってみてください。

  1. プロジェクトのプロパティを開く
  2. 「Javaコンパイラ」をクリック
  3. 「プロジェクト固有の設定を有効にする」にチェックマークを付ける
  4. すべてのドロップダウン メニューを 1.7 に設定します。
  5. ヒットOK
  6. プロジェクトをクリーンアップして再構築をトリガーする

以下を実行すると、問題が再発します。

  1. プロジェクトのプロパティを開く
  2. 「Javaコンパイラ」をクリック
  3. 「プロジェクト固有の設定を有効にする」をクリア
  4. ヒットOK
  5. プロジェクトをクリーンアップして再構築をトリガーします (自動的に再構築されます)

以下を実行すると、次のようになります...

  1. プロジェクトのプロパティを開く
  2. 「Javaコンパイラ」をクリック
  3. 「ワークスペース設定の構成」をクリックします
  4. 「コンパイラ準拠レベル」= 1.7 であることがわかります。
  5. 「デフォルトのコンプライアンス設定を使用する」がチェックされていることがわかります。

お役に立てれば!!

于 2015-05-02T11:35:51.357 に答える
2

私はあなたのコードを試しました

public class AClass {
     enum Bbb {
        ONE,
        TWO;
    }
    public void aMethod(List<Bbb> arg) {
        for (Bbb en : arg) {
            switch (en) {

                case ONE: System.out.println("ONE");break;
                case TWO: System.out.println("TWO");break;
            }
        }
    }
    public static void main(String[] args) {

        List<Bbb> list = new ArrayList<Bbb>();
        list.add(Bbb.ONE);
        list.add(Bbb.TWO);

        new AClass().aMethod(list);
    }
}

正常に動作しています。
このように引数を渡すことの長所と短所はわかりList<Bbb> argませんが、少なくともJava 7で知っているほどエラーではありません

于 2013-09-04T10:06:27.843 に答える