Variablen mit dynamischen Namen in Java zuweisen

Ich möchte eine Reihe von Variablen in Java wie folgt zuweisen:

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

Wie kann ich dies in Java erreichen?

So machen Sie Dinge in Java nicht. In Java gibt es keine dynamischen Variablen. Java-Variablen müssen im Quellcode (*) deklariert werden. Zeitraum.

Je nachdem, was Sie erreichen möchten, sollten Sie ein Array, eine List oder eine Map . z.B

 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); } 

Es ist möglich, Reflektion zu verwenden, um dynamisch auf Variablen zu verweisen , die im Quellcode deklariert wurden. Dies funktioniert jedoch nur für Variablen, die classnmitglieder sind (dh statische Felder und Instanzfelder). Es funktioniert nicht für lokale Variablen. Siehe @fyrs "schnell und schmutzig" -Beispiel.

Es ist jedoch eine schlechte Idee, solche Dinge in Java unnötigerweise zu tun. Es ist ineffizient, der Code ist komplizierter und da Sie sich auf die Laufzeitprüfung verlassen müssen, ist er fragiler.

Und das sind keine "Variablen mit dynamischen Namen". Dynamischer Zugriff auf Variablen mit statischen Namen ist besser beschrieben.


* - Diese Aussage ist etwas ungenau. Wenn Sie BCEL oder ASM verwenden, können Sie die Variablen in der Bytecode-Datei "deklarieren". Aber tu es nicht! So liegt der Wahnsinn!

Wenn Sie auf die Variablen eine Art von Dynamik zugreifen möchten, können Sie Reflektion verwenden. Reflection funktioniert jedoch nicht für lokale Variablen. Es ist nur für classnattribute anwendbar.

Ein grobes schnelles und schmutziges Beispiel ist das:

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

Sie müssen diesen Code auf verschiedene Arten verbessern, es ist nur ein Beispiel. Dies wird auch nicht als guter Code angesehen.

Was Sie brauchen, ist benanntes Array. Ich wollte den folgenden Code schreiben:

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

Sie sollten stattdessen List oder array verwenden

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

Oder

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

Oder noch besser

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

Dynamische Variablennamen in Java
Es gibt keine solche Sache.

In Ihrem Fall können Sie Array verwenden:

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

Für allgemeinere Paare (name, value) verwenden Sie Map<>

Versuche diesen Weg:

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

Du nicht. Am nächsten kommt es, dass Sie mit Maps arbeiten, um es zu simulieren, oder indem Sie eigene Objekte definieren, mit denen Sie umgehen können.