public interface Proposal {
public static final enum STATUS {
NEW ,
START ,
CONTINUE ,
SENTTOCLIENT
};
}
Javaでは、列挙型をインターフェース内でfinal
にすることはできませんが、デフォルトでは、インターフェース内のすべてのデータメンバーはpublic static final
です。誰かがこれを明確にすることができますか?
コンパイラーは、プログラマーが実装を明示的に定義した列挙型エントリーごとにサブクラスを生成するため、列挙型を最終にすることはできません。
さらに、インスタンスが独自のクラス本体を持たない列挙型は、 JLSセクション8.9 によって暗黙的に最終になります。
Javaでは、enum
型を拡張するクラスを作成することはできません。したがって、列挙型自体は常に最終的なものであるため、final
キーワードを使用する必要はありません。
もちろん、ある意味では、enum
sは最終的なものではありません。これは、列挙型記述子内の各フィールドに匿名のサブクラスを定義できるためです。しかし、final
キーワードを使用してこれらのタイプの説明を防ぐことはあまり意味がありません。なぜなら、人々は同じ.Javaファイル内にこれらのサブクラスを作成する必要があり、それを行う権限を持つ人は誰でも同じように作成できるからです。 final
キーワードは簡単に削除できます。誰かが他のパッケージで列挙型を拡張するリスクはありません。
2つのこと:
列挙型の最終を宣言しても意味がありません。クラスのファイナルは、それらを継承できないことを意味します。ただし、列挙型はデフォルトでは継承できません(つまり、最終的なものです)。
最後に、変数に対してのみ有効です。ただし、列挙型は変数というよりもデータ型のように考える必要があります。