13

だから私はグーグルとSOを見回しましたが、例や説明を見つけることができません:static finalメソッドの目的は何enumですか?

私が理解していること:

  1. メソッド宣言staticには、関数/手続き型言語のようにアクセスできます。
  2. finalオーバーライドできないことを意味します。参照を変更できません。コメントで assylias が指摘したように、staticオーバーライドすることもできません。
  3. enums はサブクラス化できません。ここで説明します。

では、サブクラスが存在しないためにオーバーライドされない場合static final、s のメソッドのポイントは何ですか?enum

4

4 に答える 4

18

静的メソッドを final にすることで、サブクラスによって非表示になる (インスタンス メソッドのみをオーバーライドできる) ことを防ぎます。

enum はサブクラス化できないため、静的メソッドを final にすることは不要ですが、禁止されているわけではありません。

注: 技術的には、クラス本体を持つ各 enum 定数は、 enum を拡張する匿名クラスを暗黙的に定義します。しかし、内部クラスは静的メソッドを宣言できない可能性があるため、静的最終メソッドをそのような定数のクラス本体に隠すことはできませんでした。

于 2013-01-10T18:57:41.500 に答える
4

メソッドが理にかなっている理由は簡単にわかるので、問題は修飾子staticに関するものだと思います。final

finalコードを少し読みやすくすることを除いて、ここでは何の役にも立ちませんが、それほどではありません。

インターフェイス メンバーは常に public ですが、これinterfaceはメソッドがしばしば として記述される方法に似ています。public void foo();

于 2013-01-10T18:57:21.900 に答える
2

Java Enum 型は定数の固定セットを表すために使用され、それを static final にすることで初期化が 1 回だけになり、単一のコピーがすべてのインスタンスで共有され、クラス名を使用して変数にアクセスし、final を使用すると読み取り専用に近くなります。

于 2013-01-10T19:05:33.850 に答える
0

列挙型のインスタンスを宣言すると、列挙型のメソッドをオーバーライドできます。基本的に、列挙型インスタンスはサブクラスとして実装されます(またはサブクラスとして考えられます)。 staticいずれの場合もメソッドをオーバーライドすることはできませんが、OPおよびその他の回答に不要な含意finalenum誤りです。

于 2013-01-10T19:01:25.633 に答える