2010-04-26 2 views
12

Diciamo che avevo bisogno di creare una serie di oggetti String [].Come denominare dinamicamente gli oggetti in Java?

So che se volevo fare un array di stringhe chiamato "test" per contenere 3 stringhe che potevo fare

String [] test = new String [3];

Ma diciamo che avevo bisogno di creare una serie di questi array e volevo che fossero denominati, 1,2, 3, 4, 5 ... ecc. Per tutti quelli di cui avevo bisogno e non sapevo come molti di quelli di cui avrei bisogno.

Come faccio a ottenere un effetto simile a questo:

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

Che sarebbe creato 5 matrici di stringa denominata 1 a 5. In sostanza voglio essere in grado di creare oggetti array con un nome detemined da qualche altra funzione . Perché non riesco a farlo? Sono solo stupido?

+0

Quali sono i casi d'uso a cui stai pensando per questo comportamento? Forse sapendo che possiamo aiutarti a capire un modo Java per fare ciò che vuoi, senza variabili nominate dinamicamente. – Phil

risposta

17

Non ci sono "variabili variabili" (ovvero variabili con nomi di variabili) in Java, ma è possibile creare mappe o matrici per gestire il problema specifico. Quando incontri un problema che ti fa pensare "Ho bisogno che le mie variabili cambino nome dinamicamente" dovresti provare a pensare "array associativo". In Java, si ottengono array associativi usando Map s.

Cioè, è possibile mantenere un elenco delle matrici, qualcosa come:

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

O forse un po 'più vicino a quello che stai dopo, è possibile utilizzare una mappa:

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

La più vicina si arriva in Java è:

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

Nota che "3" non è una variabile, ma in con congiunzione con l'oggetto map funziona come una ... sorta di.

2

Quello che vuoi fare è chiamato metaprogrammazione - programmazione di un programma, che Java non supporta (consente i metadati solo tramite annotazioni). Tuttavia, per un caso di uso così facile, è possibile creare un metodo che prenderà un int e restituirà l'array di stringhe desiderato, ad es. accodando l'array di array. Se si desidera una convenzione di denominazione più complessa, prendere in considerazione l'istruzione swtich per alcuni valori e mappare per altri valori. Per il numero fisso di valori con nomi personalizzati definire un Enum, che può essere passato come argomento.

7

Altri hanno già fornito ottime risposte, ma solo per coprire tutte le basi, Java ha array di array.

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

Ora non si dispone di 5 variabili di nome k1, k2, k3, k4, k5, ciascuno dei quali è un String[3] ...

... ma si ha una serie di String[], k[0] , k[1], k[2], k[3], k[4], ognuno dei quali è un String[3].