4 に答える
これには、インターフェースではなく、インスタンス化できないクラスを使用する必要があります。
public final class Constants{
private Constants(){}
public static final String NAME = "Name";
// more constants
}
効果的なJavaのJoshuaBlochによると、インターフェイスは動作のみを定義する必要があります。
一定のインターフェイスパターンは、インターフェイスの不適切な使用です。クラスが内部でいくつかの定数を使用することは、実装の詳細です。定数インターフェイスを実装すると、この実装の詳細がクラスのエクスポートされたAPIにリークします。クラスが定数インターフェイスを実装することは、クラスのユーザーにとって重要ではありません。実際、それは彼らを混乱させるかもしれません。さらに悪いことに、これはコミットメントを表しています。将来のリリースでクラスが変更され、定数を使用する必要がなくなった場合でも、バイナリ互換性を確保するためにインターフェイスを実装する必要があります。非最終クラスが定数インターフェイスを実装している場合、そのすべてのサブクラスの名前空間は、インターフェイス内の定数によって汚染されます。
出典:Effective Java、アイテム19:タイプを定義するためにのみインターフェースを使用する
私の提案は、定数のクラスを作成することです。インターフェイスではありません。インターフェイスにメソッドがない場合、その目的を果たしていません。
インターフェイスに定数を配置することは、Javaの初期の頃は一般的な手法でしたが、インターフェイスはデータではなくオブジェクトによって提供されるサービスを処理する必要があるため、今では多くの人がインターフェイスの不快な使用と見なしています。同様に、クラスで使用される定数は通常、実装の詳細ですが、それらをインターフェースに配置すると、クラスのパブリックAPIに昇格します。
こちらをご覧ください。
-まず、一気に質問に答えます...はい、可能です。
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(){}
}
}
インターフェイスでそのような定数を使用することは避けてください。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;
}
}
コードでそれらが必要な場合は、列挙型を使用する必要があります。次に、コードに順序があります。