私がやろうとしているのはこれです:
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
を宣言できない理由がわかりません。
ネストされた型として定義されているenum
型は、常に暗黙的にstatic
( JLS§8.9。Enums を参照)
非静的型の内部に静的なネスト型を持つことはできません(別名「内部クラス」。 JLS§8.1.3。内部クラスと包含インスタンス を参照)。
したがって、enum
内部型を非静的なネストされた型の中に含めることはできません。
次のような列挙型を宣言した場合:
enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS}
Javaコンパイラは、次のクラスを合成的に生成します。
final class Suit extends Java.lang.Enum<Suit> {
public static final Suit SPADES;
public static final Suit HEARTS;
public static final Suit CLUBS;
public static final Suit DIAMONDS;
private static final Suit[] $VALUES;
public static Suit[] values();
public static Suit valueOf(Java.lang.String);
private Suit();
}
プライベートコンストラクターから推測できるように、既に定義されている静的フィールド以外にこのクラスの他のインスタンスを作成する意図はありませんが、最も重要なことは、受け入れられた回答で述べられているように、内部クラスに静的メンバーを含めることはできません( JLS§8.1.3。内部クラスと包含インスタンス )、enum合成クラスはそうするため、内部クラスとして受け入れられなくなります。
+ Joachim Sauerからの十分な情報はすでにありますが、詳細を追加しています。
内部クラスが静的なネストされた内部クラスである場合にのみ、内部列挙型を定義できます。下記参照
private static class DbResource {
public enum DB {
MERGE_FROM, MERGE_TO, MAIN;
}
}
これは私のユースケースでうまくいきました:
public class History {
public interface HConstants{
public enum StateType { PAST,CURRENT,FUTURE}
}
//Inner class
public class State implements HConstants{
public StateType stateField = StateType.PAST;