Как мне динамически именовать объекты в Java?

Предположим, что ваш файл подобен этому

enter image description here [/g0]

Затем выберите текст и используйте TextFX Tools -> Sort lines case insensitive (at column). Убедитесь, что вы выбрали Sort outputs only UNIQUE (at columns) line.

enter image description here [/g1]

13
задан Sam Stern 26 April 2010 в 14:54
поделиться

4 ответа

В 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..
21
ответ дан 1 December 2019 в 19:39
поделиться

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

2
ответ дан 1 December 2019 в 19:39
поделиться

В 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
ответ дан 1 December 2019 в 19:39
поделиться

Другие уже предоставили отличные ответы, но, чтобы охватить все основы, 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] , каждый из которых является Строка [3] .

7
ответ дан 1 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: