Подтвердить что ты не робот

Как динамически назвать объекты в 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];
}

Что бы создать 5 строковых массивов с именем от 1 до 5. В принципе, я хочу иметь возможность создавать объекты массива с именем, определенным другой функцией. Почему я не могу это сделать? Я просто глуп?

4b9b3361

Ответ 1

В Java нет никаких "переменных переменных" (то есть переменных с именами переменных), но вы можете создавать Карты или Массивы для решения вашей конкретной проблемы. Когда вы сталкиваетесь с проблемой, которая заставляет вас думать: "Мне нужны переменные для динамического изменения имен", вы должны попробовать и подумать "ассоциативный массив". В Java вы получаете ассоциативные массивы с использованием Map s.

То есть вы можете сохранить список своих массивов, например:

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..

Ответ 2

Другие уже предоставили отличные ответы, но только для того, чтобы охватить все базы, у Java есть массив массивов.

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

Теперь у вас нет 5 переменных с именем k1, k2, k3, k4, k5, каждый из которых является String[3]...

... но у вас есть массив из String[], k[0], k[1], k[2], k[3], k[4], каждый из которых является String[3].

Ответ 3

Ближе всего вы получите 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 он работает как один... вид.

Ответ 4

То, что вы хотите сделать, называется метапрограммированием - программирование программы, которую Java не поддерживает (она позволяет метаданные только через аннотации). Однако для такого простого использования вы можете создать метод, который примет int и вернет требуемый массив строк, например. путем обращения к массиву массивов. Если вам требуется более сложное соглашение об именах, рассмотрите инструкцию swtich для нескольких значений и сопоставьте для большего количества значений. Для фиксированного количества значений с пользовательскими именами задайте Enum, который можно передать как аргумент.