2013-01-10 11 views
12

私はgoogleの周りを見ているので、例や説明を見つけることができません。staticfinalメソッドの目的はenumにありますか?enumのstatic finalメソッド

私が理解して:

  1. 方法はstaticが関数/手続き型言語のようにアクセスすることができます宣言します。
  2. finalは、を無効にすることができないことを意味します。です。参照を変更することはできません。コメントstaticで指摘されているように、オーバーライドすることもできません。
  3. enumをサブクラス化することはできません。説明はhereです。 は、サブクラスがありませんので、上書きすることはありません場合

のでenum秒でstaticfinal方法のポイントは何ですか?

+4

いずれの場合でも静的メソッドをオーバーライドすることはできません。 – assylias

+0

@Henry静的メソッドはオーバーライドできません。 – biziclop

+0

@ assyliasポイント2に追加する必要があります。 – wtsang02

答えて

17

最終的に静的メソッドを作成することにより、サブクラスによってyou prevent it from being hidden(インスタンスメソッドのみがオーバーライドできます)。

enumはサブクラス化できないため、最終的な静的メソッドを作成することは余分ですが、禁止されていません。

注:技術的には、クラス本体がimplicitly defines an anonymous class that extends the enumの各列挙定数です。しかし、inner classes may not declare static methods以降、このような定数のクラス本体で静的な最終メソッドを隠すことはできませんでした。

+1

+1実際には、Enumをサブクラス化できるケースがあります。しかし、静的な内部クラス(匿名クラスなど)に静的メソッドを追加することはできませんので、 'Enum SomeEnum {VALUE1 {}、VALUE2 {};}' VALUE1 {ここで「静的」で「最終的に」は過剰です。 – Pshemo

+0

@Pshemoそれは良い点です - 私は私の答えを編集し、参照を追加しました。 – assylias

4

staticの方法が理にかなっている理由は分かりやすいので、質問はfinal修飾語です。

finalはここで目的がありませんが、コードを読みやすくすることを除いては、あまり使わないようにしてください。

interfaceの方法は、インターフェイスメンバーが常に公開されていても、しばしばpublic void foo();と書かれています。

0

enumのインスタンスを宣言すると、enumのメソッドをオーバーライドすることができます。基本的にenumインスタンスはサブクラスとして実装されています。どのような場合でもstaticメソッドをオーバーライドすることはできませんが、enumの場合、finalが余分であるOPおよびその他の回答の意味はfalseです。

+1

列挙型定数に静的メソッドを追加することはできません。 – assylias

2

Java Enum型は定数の固定セットを表すために使用され、静的finalはその初期化を一度だけ行い、すべてのインスタンスで単一のコピーを共有し、クラス名で変数にアクセスし、読み込み専用

関連する問題