72

私がやろうとしていることはこれです:

public class History {
    public class State {
        public enum StateType {

Eclipse で次のコンパイル エラーが表示されStateTypeますThe member enum StateType must be defined inside a static member type

Stateクラスを静的にすると、エラーは消えます。静的にすることはできますが、内部クラスでState宣言できない理由がわかりません。enum

4

4 に答える 4

96

enumネストされた型として定義された型は、常に暗黙的になりますstaticJLS§8.9。列挙型を参照) 。

非静的型の内部に静的ネスト型を含めることはできません(別名「内部クラス」。JLS§8.1.3。内部クラスとそれを囲むインスタンスを参照)。

enumしたがって、非静的ネスト型の内部に内部型を含めることはできません。

于 2013-02-13T16:23:47.840 に答える
6

+Joachim Sauer からの情報はもう十分です。さらに詳細を追加します。

内部クラスが静的なネストされた内部クラスである場合にのみ、内部列挙型を定義できます。下記参照

private static class DbResource {

    public enum DB {
        MERGE_FROM, MERGE_TO, MAIN;
    }
}
于 2016-01-30T10:08:02.917 に答える
1

これは私のユースケースでうまくいきました:

public class History {

    public interface HConstants{
         public enum StateType { PAST,CURRENT,FUTURE}
    }

    //Inner class
    public class State implements HConstants{
        public StateType stateField = StateType.PAST;
于 2019-03-08T17:40:32.243 に答える