web-dev-qa-db-ja.com

Java定数ファイル

私はAndroidアプリケーションを開発しており、JavaとAndroidは非常に新しいです。

いくつかのアクティビティで使用する定数を作成したいと思います。これらの定数はどこで定義できますか?

ありがとう。

23
VansFannel

Javaでは悪い習慣と考えられており、ほとんどのOO言語では、定数を保持するためにクラスを定義するだけです。定数が関連付けられているクラスで定数を定義する方がはるかに優れています。通常は定数があります。例えば.

interface MyComponent {
  /** The default height for a component */
  public static final int DEFAULT_HEIGHT = 5;
  // other stuff
}

実際に別のクラスを定義するのが自由ではない場合。

編集:ここで重要なことは次のとおりです:

  1. 定数を見つけやすくします。それらを「自然な」場所に配置する場合は、そこに配置します(つまり、Componentオブジェクトのデフォルトの高さはComponentクラスに属します)。
  2. 必要以上に高いカップリングは必要ありません。すべての定数を1つの「定数」クラスに配置すると、特に後続の修飾子がすべての定数を定数クラスに配置する傾向があるため、それらを自然に配置できる別のクラスがあるかどうかに関係なく、すべての定数が結合されます。
  3. 定数が複数のクラスで使用されているからといって、定数が「定数」クラスにある必要があるわけではありません。定数が「アプリケーション」で使用されている場合およびアプリケーションクラスを使用するクラスの場合、定数をアプリケーションクラスに配置します。その方法では、カップリングを増やしていません。
51
DJClayworth

通常、定数クラスを使用するか、定数クラスが使用されるクラスで定義します。

class Constants {
   public static final int NUM_TRIANGLES = 4;
   public static final String SOME_TEXT = "This is a constant";
}

次に、次の方法でそれらを参照します。

String inst = Constants.SOME_TEXT;
18
billjamesdev

最も一般的な方法は、必要な場合にクラスに「 定数 」を作成することです。

class Example { 
  private static final int FILENAME = "test.txt; 
} 

プライベートの代わりに default 、protectedまたはpublicと宣言することもできます。 OO anti pattern と見なされますが、定数を定義することは、全体の定数を格納する特別な「定数」( God )クラスですまたは、設定データを Javaプロパティファイル に保存することもできますが、これはアンチパターンとは見なされません。

急速に普及している別のオプションは、 Dependency Inject (DI)パターンの使用です。多くの場合、このパターンは依存オブジェクトに使用されますが、定数値をオブジェクトに注入するためにも使用できます。これは、たとえば、Googleの軽量 Guice DIフレームワークで実装できます。

class Example {
  String filename;

  @Inject
  public Example(@ConfigFilename String filename) {
     this.filename = filename;        
  }

特別な Binder クラスでは、@ ConfigFilenameで注釈された文字列に値をバインドします。このようにして、独立してテストできる最小限のカップリングとクラスがあります。

7
Kdeveloper

Java列挙型でいくつかの定数を定義できます。

単一のJava列挙子は、関連するデータの複数のフィールドを保持できます。

Oracleは この紹介Java列挙型)を提供します。

0
Andy Thomas