ネストされたJava列挙定義-静的として宣言すると違いが生じますか? [複製]

StackOverflow https://stackoverflow.com/questions/253226

  •  05-07-2019
  •  | 
  •  

質問

    

この質問にはすでに回答があります:

         

インターフェイスがあります-これは例としてうまく工夫されたバージョンです:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Charge 列挙型をstaticとして定義した場合、この実装の動作に違いはありますか?

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
役に立ちましたか?

解決

いいえ、違いはありません。しかし、Jonが言うように、それはインターフェイス内のメンバー宣言であるためではありません。本当の理由は、言語仕様( 8.9 )によると

  

ネストされた列挙型は暗黙的に   静的。許される   ネストされた列挙型を明示的に宣言します   静的になります。

次の例では、staticでも違いはありません(インターフェイスがなくても):

public class A {
  enum E {A,B};
}

public class A {
  static enum E {A,B};
}

ネストされた private 列挙型(暗黙的にパブリックではない)を使用した別の例。

public class A {
  private static enum E {A,B}
}

他のヒント

いいえ、違いはありません。 言語仕様、セクション9.5

  

インターフェイスにはメンバータイプを含めることができます   宣言(§ 8.5 )。メンバータイプ   インターフェイスでの宣言は   暗黙的に static および public

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top