Affectation de variables avec des noms dynamics en Java

Je voudrais assigner un ensemble de variables dans Java comme suit:

int n1,n2,n3; for(int i=1;i<4;i++) { n = 5; } 

Comment puis-je y parvenir en Java?

Ce n’est pas comme ça que vous faites les choses en Java. Il n’y a pas de variables dynamics en Java. Les variables Java doivent être déclarées dans le code source (*). Période.

Selon ce que vous essayez de réaliser, vous devez utiliser un tableau, une List ou une Map . par exemple

 int n[] = new int[3]; for (int i = 0; i < 3; i++) { n[i] = 5; } List n = new ArrayList(); for (int i = 1; i < 4; i++) { n.add(5); } Map n = new HashMap(); for (int i = 1; i < 4; i++) { n.put("n" + i, 5); } 

Il est possible d'utiliser la reflection pour faire référence dynamicment aux variables qui ont été déclarées dans le code source. Cependant, cela ne fonctionne que pour les variables qui sont des membres de la classe (à savoir les champs statiques et les champs d'instance). Cela ne fonctionne pas pour les variables locales. Voir l'exemple "rapide et sale" de @fyr.

Cependant, faire ce genre de chose inutilement en Java est une mauvaise idée. Il est inefficace, le code est plus compliqué et comme vous comptez sur le runtime, la vérification est plus fragile.

Et ce n'est pas "des variables avec des noms dynamics". Il est préférable de décrire l'access dynamic aux variables avec des noms statiques.


* - Cette déclaration est légèrement inexacte. Si vous utilisez BCEL ou ASM, vous pouvez "déclarer" les variables dans le fichier bytecode. Mais ne le fais pas! C'est comme ça que la folie!

Si vous voulez accéder aux variables d’une sorte de dynamic, vous pouvez utiliser la reflection. Cependant, Reflection ne fonctionne pas pour les variables locales. Il est uniquement applicable aux atsortingbuts de classe.

Voici un exemple approximatif:

 public class T { public Integer n1; public Integer n2; public Integer n3; public void accessAtsortingbutes() throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { for (int i = 1; i < 4; i++) { T.class.getField("n" + i).set(this, 5); } } } 

Vous devez améliorer ce code de différentes manières, ce n'est qu'un exemple. Ceci n'est pas non plus considéré comme un bon code.

Ce dont vous avez besoin est nommé array. Je voulais écrire le code suivant:

 int[] n = new int[4]; for(int i=1;i<4;i++) { n[i] = 5; } 

Vous devriez utiliser List ou array place

 List list = new ArrayList(); list.add(1); list.add(2); list.add(3); 

Ou

 int[] arr = new int[10]; arr[0]=1; arr[1]=2; 

Ou encore mieux

 Map map = new HashMap(); map.put("n1", 1); map.put("n2", 2); //conditionally get map.get("n1"); 

Noms de variables dynamics en Java
Il n’y a pas une telle chose.

Dans votre cas, vous pouvez utiliser array:

 int[] n = new int[3]; for() { n[i] = 5; } 

Pour des paires plus générales (name, value) , utilisez Map<>

Essayez de cette façon:

  HashMap hashMap = new HashMap(); for (int i=1; i<=3; i++) { hashMap.put("n" + i, 5); } 

Vous ne le faites pas La chose la plus proche que vous puissiez faire est de travailler avec Maps pour le simuler ou définir vos propres objects à traiter.