Я хотел бы присвоить набор переменных в Java следующим образом:
int n1,n2,n3;
for(int i=1;i<4;i++) { n<i> = 5; }
Как я могу добиться этого в Java?
Переведено автоматически
Ответ 1
В Java все делается не так. В Java нет динамических переменных. Переменные Java должны быть объявлены в исходном коде1.
В зависимости от того, чего вы пытаетесь достичь, вам следует использовать массив, List или a Map; например
int n[] = newint[3]; for (inti=0; i < 3; i++) { n[i] = 5; }
List<Integer> n = newArrayList<Integer>(); for (inti=1; i < 4; i++) { n.add(5); }
Map<String, Integer> n = newHashMap<String, Integer>(); for (inti=1; i < 4; i++) { n.put("n" + i, 5); }
Можно использовать отражение для динамического обращения к переменным, которые были объявлены в исходном коде. Однако это только работает для переменных, являющихся членами класса (т.Е. статических полей и полей экземпляра). Это не работает для локальных переменных. Смотрите пример "быстрого и грязного" от @fyr .
Однако делать подобные вещи без необходимости в Java - плохая идея. Это неэффективно, код более сложный, и поскольку вы полагаетесь на проверку во время выполнения, он более хрупкий. И это не "переменные с динамическими именами". Это лучше описать как динамический доступ к переменным со статическими именами.
1 - Это утверждение немного неточно. Если вы используете BCEL или ASM, вы можете "объявлять" переменные в файле байт-кода. Но не делайте этого! Этот путь - безумие!
Ответ 2
Если вы хотите получить доступ к переменным каким-либо динамическим способом, вы можете использовать отражение. Однако отражение работает не для локальных переменных. Оно применимо только к атрибутам класса.
Грубый, быстрый и грязный пример таков:
publicclassT { public Integer n1; public Integer n2; public Integer n3;