3
4

4 に答える 4

7

これには、インターフェースではなく、インスタンス化できないクラスを使用する必要があります。

public final class Constants{

  private Constants(){}

  public static final String NAME = "Name";

  // more constants


}

効果的なJavaのJoshuaBlochによると、インターフェイスは動作のみを定義する必要があります。

一定のインターフェイスパターンは、インターフェイスの不適切な使用です。クラスが内部でいくつかの定数を使用することは、実装の詳細です。定数インターフェイスを実装すると、この実装の詳細がクラスのエクスポートされたAPIにリークします。クラスが定数インターフェイスを実装することは、クラスのユーザーにとって重要ではありません。実際、それは彼らを混乱させるかもしれません。さらに悪いことに、これはコミットメントを表しています。将来のリリースでクラスが変更され、定数を使用する必要がなくなった場合でも、バイナリ互換性を確保するためにインターフェイスを実装する必要があります。非最終クラスが定数インターフェイスを実装している場合、そのすべてのサブクラスの名前空間は、インターフェイス内の定数によって汚染されます。

出典:Effective Java、アイテム19:タイプを定義するためにのみインターフェースを使用する

于 2012-10-30T10:27:56.760 に答える
1

私の提案は、定数のクラスを作成することです。インターフェイスではありません。インターフェイスにメソッドがない場合、その目的を果たしていません。

インターフェイスに定数を配置することは、Javaの初期の頃は一般的な手法でしたが、インターフェイスはデータではなくオブジェクトによって提供されるサービスを処理する必要があるため、今では多くの人がインターフェイスの不快な使用と見なしています。同様に、クラスで使用される定数は通常、実装の詳細ですが、それらをインターフェースに配置すると、クラスのパブリックAPIに昇格します。

こちらをご覧ください。

于 2012-10-30T10:28:50.757 に答える
0

-まず、一気に質問に答えます...はい、可能です。

public int x=5; または

int x=5

これは常に次のように解釈されます public static final int x=5;

-しかし、これは正しい方法ではありません。

-またはこれをより適切に使用EnumまたはClass with Private Constructor 処理できます。

例えば:

静的フィールドを持つクラス:

   public class Test{


       public final String NAME = "Name";

       private Test(){}


      }

}
于 2012-10-30T10:45:08.083 に答える
0

インターフェイスでそのような定数を使用することは避けてください。Sean Patrick Floyd によって提案されたソリューションを使用できます。または、定数に列挙型を使用します。

public enum Constants {
 NAME("Name");

 private final String constant; 

 private Constats(String constat) {
   this.constant = constant;
 }

 public String constant(){ 
   return this.constat; 
 }

}

コードでそれらが必要な場合は、列挙型を使用する必要があります。次に、コードに順序があります。

于 2012-10-30T10:33:21.540 に答える