0

クラスではなくインターフェイスで (簡潔にするために) 定数を宣言することは、Java 5 の名前空間を汚染し、Java 5 をポストするため、悪であることは誰もが理解していますが、静的インポートを使用して冗長性を減らすことができます (Effective Java Item 17)。ただし、私の同僚は、開発者がクラスで変数を定義するときに変数を final として宣言するのを見逃す可能性があることを指摘しました (public および static は、変数がないとコンパイル エラーになるため無視できます)。賛成/反対の議論はありますか?これはかなり初歩的なように見えるので、以前に詳細に議論された可能性があると思いますが、私のgoogle-fuは今日私を助けていません:)。誰かがここで意見を述べたり、これがすでに議論されている可能性のある場所を教えてくれたりしていただければ幸いです.

前もって感謝します!

編集: このように定義されたインターフェイス ファイルは、クライアントのクラス階層では使用されませんが、純粋に定数を格納するために使用されます。

4

2 に答える 2

0

インターフェイスで定数を定義することが悪いとは思いません。どちらかといえば、パブリック クラスに定数インターフェイスを実装することは悪です。ただし、これにより、他にも多くの優れたオプションが残されます

  • インターフェイスを拡張して定数を追加できます
    • たとえば、インターフェイスはよく知られているプロパティ名を定義します。次に、実装に固有のプロパティを追加するサブインターフェイスを持つことができます。
    • 定数クラスには通常、サブクラス化を不可能にするプライベート コンストラクターがあります。
  • 私の実装のすべてのクラスが (パブリック) API の一部であるとは限りません。内部クラスが定数インターフェイスを実装するかどうかは実際には問題ではないと思います。
  • メソッドがメソッド引数として定数を期待しているとしましょう: myXmlProcessor.setProperty(XMLOptions.VALIDATING, true)
    • 定数をどこから取得するかをどのように知っていますか? 多くの場合、複数の定数クラスが存在するため、間違ったクラスを使用するリスクが残ります。
    • myXmlProcessor.setProperty(MyXMLProcessor.VALIDATING, true):ここで、それが正しいことがわかります。
  • クラス階層があり、基本クラスが定数インターフェイスを実装している場合、それらはサブクラスで自動的に使用可能になります。繰り返しますが、ミスの余地が少なくなります。
于 2012-10-22T09:28:39.213 に答える
0

Java 5 以降の SDK を使用している場合は、インターフェイスを使用して public static 定数を定義する代わりに、Enum を評価してみませんか。それにもかかわらず、アプローチに問題はありません。

于 2012-10-22T09:51:46.910 に答える