55

私はインターフェースを持っています - これは例としてうまく工夫されたバージョンです:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Charge列挙型を静的として定義した場合、これの実装の動作に違いはありますか-つまり、これには何らかの効果がありますか:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
4

2 に答える 2

88

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

ネストされた列挙型は暗黙的に静的です。ネストされた列挙型を static として明示的に宣言することは許容されます。

次の例では、静的でも違いはありません (インターフェイスがありませんが)。

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

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

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

public class A {
  private static enum E {A,B}
}
于 2008-10-31T12:08:17.697 に答える
31

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

インターフェイスには、メンバー型の宣言が含まれる場合があります ( §8.5 )。インターフェイスのメンバ型宣言は、暗黙的staticに andpublicです。

于 2008-10-31T11:45:26.400 に答える