web-dev-qa-db-ja.com

Java定数の配列

enumsを使用せずに、Javaで定数の配列を宣言して初期化するにはどうすればよいですか?

static final Type[] arrayOfConstants = new Type[10]; // not an array of constants
7
Athanasios V.

不変の配列を作成したい場合は、できません。 Java内のすべての配列は変更可能です。

クラスで配列を事前定義するだけの場合は、次のようにできます。

private static final int[] MY_ARRAY = {10, 20, 30, 40, 50};

ここでは、長さ5の定義済み配列MY_ARRAYを作成したので、MY_ARRAY[0]10になります。 MY_ARRAYフィールドでもfinalが宣言されているため、配列要素を変更できなかったという意味ではありません。したがって、publicまたはprotected修飾子を介してそのような配列を公開しない方が良いでしょう。

10
Tagir Valeev

値を変更せず、ランダムアクセスを必要とせずにコレクションのメンバーにアクセスしたいだけの場合は、定数配列を使用する代わりに非常に単純な解決策として、最終的な不変リストを作成します。

static final ImmutableList<Type> arrayOfConstants = ImmutableList.of(t1, t2, t3);
2
Florin Grigoriu

つまり、配列コンポーネントは定数であることを意味します。つまり、a [0]は、このpublic static final int SIZE = 10のような定数変数です。

配列のインデックスに名前を付けることはできません。

既存の定数の値を使用して配列を初期化できます。

public static final int SIZE = 10;

public static final int[] CONSTANTS = { SIZE };

配列はfinalと宣言されていますが、その値は変更される可能性があることに注意してください。 finalは配列変数を再割り当てできないことを保証するだけなので、変異を防ぐために配列をカプセル化する必要があります。

final class Constants {
    public static final int SIZE = 10;

    private static final int[] CONSTANTS = { SIZE };

    public static int getConstant(int index) {
       return CONSTANTS[index];
    }
}

ループしたい場合は、配列の deep-copy を返すことをお勧めします。

2
Vince Emigh

-事前に値がわかっている場合は、配列の値を初期化し、その配列にfinalのマークを付けます。

-最初に値がわからない場合は、パブリックゲッター/セッターメソッドを記述し、配列をprivateとして宣言します。特定の要素で行われた変更を破棄する(または同じ要素に複数の変更があった場合に例外をスローする)ロジックをセッターメソッドに記述します。

0
Mustafa sabir

finalがオブジェクトで使用される場合、そのオブジェクトの参照を変更することはできませんが、値の変更は完全に問題ありません。ArrayはJavaのオブジェクトであり、オブジェクトの値を変更したくない場合は、作成したらの場合、オブジェクトを不変にする必要があり、Javaではプリミティブ配列を不変にすることはできません。

    final int [] finalArr={5,6,8};

     System.out.println("Value at index 0 is "+finalArr[0]);    
      //output : Value at index 0 is 5

      //perfectly fine
      finalArr[0]=41;

     System.out.println("Changed value at index 0 is "+finalArr[0]);
    //Changed value at index 0 is 41

     int[] anotherArr={7,9,6};
     // finalArr=anotherArr;
     //error : cannot assign a value to final variable finalArr

不変配列の詳細については、次のリンクを参照してください。

Javaの不変の配列

通常の配列をJavaで不変にする方法はありますか?

0
Atul Raj

しばらくの間、この投稿は公開されています。驚きました。

public static final List<LanguageModel> GenderDataSource = new ArrayList<GenderModel>(){{
    add(new LanguageModel("0", "English"));
    add(new LanguageModel("1", "Hindi"));
    add(new LanguageModel("1", "Tamil"));
};};

ここでLanguageModelには、IdとTitleの2つのプロパティが含まれるか、ジェネリックTypeのモデルクラスを使用できます。

一定としてうまく機能するはずです。

-N Baua

0
NBaua