Это не так, как вы делаете вещи в Java.В Java нет динамических переменных.Переменные Java должны быть объявлены в исходном коде 1 .
В зависимости от того, чего вы пытаетесь достичь, вы должны использовать массив, List
или Map
;Например,
int n[] = new int[3];
for (int i = 0; i < 3; i++) {
n[i] = 5;
}
List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
n.add(5);
}
Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
n.put("n" + i, 5);
}
Можно использовать отражение для динамического обращения к переменным, которые были объявлены в исходном коде.Однако этот только работает для переменных, которые являются членами класса (т. Е. Статические поля и поля экземпляров).Это не работает для локальных переменных.См. Пример «быстрого и грязного» @ fyr.
Однако делать такие вещи без необходимости в Java - плохая идея.Это неэффективно, код более сложен, и, поскольку вы полагаетесь на проверку во время выполнения, он более хрупок.И это не «переменные с динамическими именами».Это лучше описать как динамический доступ к переменным со статическими именами.
1 - Это утверждение немного неточно.Если вы используете BCEL или ASM, вы можете «объявить» переменные в файле байт-кода.Но не делай этого!Так лежит безумие!