8

java.lang.Enum .values()メソッドに関して非常に具体的な問題があります。

そのjavadocをオーバーライドしたいと思います。非常に正確には、これに関する現在の javadoc は、独自の列挙型を作成した後のものです。

public static MyClass.MyEnum[] values()

  ... 
  This method may be used to iterate over the constants as follows:

    for (MyClass.MyEnum c : MyClass.MyEnum.values())
    System.out.println(c);

  Returns:
    ...

しかし、私の会社System.outでは通話は悪い習慣と見なされているため、表示されないようにしたいと思います。私の最初の試みはオーバーライドvalues()でしたが、明らかに不可能です。これを行う別の方法はありますか?または、生成されたドキュメントを更新する唯一の可能性はありますか?

values()また、オーバーライドできない理由についても興味があります。「コンパイラによって生成される」という他の質問を読みました。しかし、誰かがもっと正確にできますか? 列挙型の名前から生成されているようですが、理由は説明されていません。

4

3 に答える 3

12

valuesは静的メソッドであり、オーバーライドの対象ではありません。生成されたものを置き換える独自のメソッドを提供することはできません。これは仕様によるものです。

ソース コードを管理していないメソッドの Javadoc を置き換える標準的なメカニズムはありませんが、ビルド ツールをいじったり、他のすべてが失敗した場合は最終的な Javadoc HTML をいじったりする可能性があります。

于 2012-11-12T14:00:28.353 に答える
1

Oracle Javaチュートリアルから:

enum宣言は、クラス(enum型と呼ばれる)を定義します。enumクラス本体には、メソッドやその他のフィールドを含めることができます。コンパイラは、列挙型を作成するときに、いくつかの特別なメソッドを自動的に追加します。たとえば、列挙型のすべての値を宣言された順序で含む配列を返す静的値メソッドがあります。

したがって、メソッド値はコンパイラによって作成された特別なメソッドであるため、オーバーライドできません。Eclipse IDEは、これを行おうとすると次のエラーを生成します。

列挙型(列挙型)はすでにメソッドvalues()を暗黙的に定義しています

于 2012-11-12T14:03:36.087 に答える
1

これは可能ではないと思いますが、必要に応じて、JDK の問題を提出し、OpenJDK の修正を提供することもできます。

于 2012-11-12T13:51:25.397 に答える