web-dev-qa-db-ja.com

Javaでオブジェクトに動的に名前を付けるにはどうすればよいですか?

一連のString []オブジェクトを作成する必要があるとしましょう。

「test」という文字列配列を作成して3つの文字列を保持したい場合は、次のことができることを知っています。

String [] test = new String [3];

しかし、これらの配列のシリーズを作成する必要があり、1、2、3、4、5などの名前を付けたいとしましょう。必要な数がいくつあっても、いくつにするかわかりませんでした。必要。

これと同様の効果を得るにはどうすればよいですか?

for (int k=0; k=5; k++){ 
String[] k = new String[3];
}

これにより、1から5という名前の5つの文字列配列が作成されます。基本的に、他の関数によって決定された名前の配列オブジェクトを作成できるようにしたいと思います。なぜ私はこれを行うことができないようですか?私はバカなの?

13
Sam Stern

Javaには「変数変数」(つまり変数名を持つ変数)はありませんが、特定の問題に対処するためにマップまたは配列を作成できます。 「名前を動的に変更するには変数が必要だ」と思わせる問題が発生した場合は、「連想配列」を試してみてください。 Javaでは、Mapsを使用して連想配列を取得します。

つまり、次のような配列のリストを保持できます。

List<String[]> kList = new ArrayList<String[]>();
for(int k = 0; k < 5; k++){
   kList.add(new String[3]);
}

または、目的に少し近づいたら、マップを使用できます。

Map<Integer,String[]> kMap = new HashMap<Integer,String[]>();
for(int k = 0; k < 5; k++){
  kMap.put(k, new String[3]);
}
// access using kMap.get(0) etc..
21
Mark Elliot

他の人はすでに素晴らしい答えを提供していますが、すべてのベースをカバーするために、Javaには配列の配列があります。

String[][] k = new String[5][3];
k[2][1] = "Hi!";

これで、k1k2k3k4k5という名前の5つの変数がなくなり、それぞれがString[3] .. ..

...しかし、String[]k[0]k[1]k[2]k[3]k[4]の配列があり、それぞれがString[3]です。

7

Java:に最も近いものは次のとおりです。

Map<String, String[]> map = new HashMap<String, String[]>();

for (int k=0; k=5; k++){ 
    map.put(Integer.toString(k), new String[3]);
}

// now map.get("3") will get the string array named "3".

ご了承ください "3"は変数ではありませんが、mapオブジェクトと組み合わせると、1つの...一種のように機能します。

4
Stephen C

あなたがしたいことはメタプログラミングと呼ばれます-プログラムのプログラミングJavaはサポートしていません(アノテーションを通してのみメタデータを許可します)。しかし、そのような簡単な使用例のために、あなたはメソッドを作成することができますこれはintを取り、配列の配列にアクセスするなどして、必要な文字列配列を返します。より複雑な命名規則が必要な場合は、少数の値にはswtichステートメントを、より多くの値にはmapを検討してください。カスタム名を持つ値の固定数の場合引数として渡すことができるEnumを定義します。

2