Как динамически назвать объекты в 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. В принципе, я хочу иметь возможность создавать объекты массива с именем, определенным другой функцией. Почему я не могу это сделать? Я просто глуп?
Ответы
Ответ 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, который можно передать как аргумент.