2010-04-26 10 views
12

Nehmen wir an, ich musste eine Reihe von String [] Objekten erstellen.Wie benenne ich dynamisch Objekte in Java?

Ich weiß, dass, wenn ich eine String-Array namens "test" zu halten, 3 Strings machen wollte konnte ich

String [] test = new String tun [3];

Aber sagen wir, ich musste eine Reihe dieser Arrays machen, und ich wollte, dass sie benannt wurden, 1,2, 3, 4, 5 ... usw. Für so viele benötigte ich und ich wusste nicht wie viele, die ich brauchen würde.

Wie kann ich eine ähnliche Wirkung wie dies erreichen:

for (int k=0; k=5; k++){ 
String[] k = new String[3]; 
} 

Welche 5 String-Arrays erstellt würde 1 bis 5. Im Grunde nannte ich Array-Objekte mit einem Namen durch eine andere Funktion detemined zu schaffen in der Lage sein wollen . Warum kann ich das nicht tun? Bin ich nur dumm?

+0

An welche Anwendungsfälle denken Sie für dieses Verhalten? Vielleicht wissen wir, dass wir Ihnen helfen können, einen Java-Weg zu finden, um das zu tun, was Sie wollen, ohne dynamisch benannte Variablen. – Phil

Antwort

17

Es gibt keine "Variablenvariablen" (dh Variablen mit Variablennamen) in Java, aber Sie können Maps oder Arrays erstellen, um mit Ihrem speziellen Problem umzugehen. Wenn Sie auf ein Problem stoßen, bei dem Sie denken "Ich brauche meine Variablen, um Namen dynamisch zu ändern", sollten Sie versuchen, "assoziatives Array" zu denken. In Java erhalten Sie assoziative Arrays mit Map s.

Das heißt, können Sie eine Liste Ihrer Arrays halten, so etwas wie:

List<String[]> kList = new ArrayList<String[]>(); 
for(int k = 0; k < 5; k++){ 
    kList.add(new String[3]); 
} 

Oder vielleicht ein wenig näher an, was Sie nach, können Sie eine Karte verwenden:

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.. 
3

Die nächstgelegene Sie in Java bekommen ist:

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". 

Beachten Sie, dass "3" keine Variable ist, sondern in con Kreuzung mit dem map Objekt funktioniert es wie eine ... Art von.

2

Was Sie tun möchten, heißt Metaprogrammierung - Programmierung eines Programms, das Java nicht unterstützt (es erlaubt Metadaten nur durch Anmerkungen). Für einen solchen einfachen Anwendungsfall können Sie jedoch eine Methode erstellen, die einen int-Wert annimmt und das von Ihnen gewünschte String-Array zurückgibt, z. indem Sie das Array von Arrays abfragen. Wenn Sie eine komplexere Benennungskonvention wünschen, sollten Sie die swtich-Anweisung für einige Werte in Betracht ziehen und nach weiteren Werten suchen. Definieren Sie für eine feste Anzahl von Werten mit benutzerdefinierten Namen eine Enum, die als Argument übergeben werden kann.

7

Andere haben bereits gute Antworten geliefert, aber um alle Grundlagen abzudecken, verfügt Java über Array-Arrays.

String[][] k = new String[5][3]; 
k[2][1] = "Hi!"; 

Jetzt müssen Sie nicht 5 Variablen namens k1, k2, k3, k4, k5, die jeweils eine String[3] ...

... aber Sie haben eine Reihe von String[], k[0]k[1], k[2], k[3], k[4], jeweils eine String[3].