Comment nommer dynamiquement des objets en Java?

disons que j'avais besoin de faire une série d'objets String [].

je sais que si je voulais faire un tableau de chaîne appelée "test" pour tenir 3 Cordes que je pouvais faire

String [] test = new String[3];

Mais disons que j'avais besoin de faire une série de ces tableaux, et je voulais d'être nommé, 1,2, 3, 4, 5... etc. Pour autant que j'en ai besoin et je ne savais pas combien j'en aurais besoin.

Comment obtenir un effet similaire à ceci:

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

qui créerait 5 tableaux de chaîne nommés 1 à 5. Fondamentalement, je veux être capable de créer des objets array avec un nom déterminé par une autre fonction. Pourquoi ne puis-je pas paraître pour ce faire? Suis-je tout simplement stupide?

13
demandé sur Sam Stern 2010-04-26 07:54:13

4 réponses

il n'y a pas de "variables variables" (c'est-à-dire des variables avec des noms de variables) en Java, mais vous pouvez créer des cartes ou des tableaux pour traiter votre problème particulier. Lorsque vous rencontrez un problème qui vous fait penser "j'ai besoin de mes variables pour changer les noms dynamiquement" vous devriez essayer et penser "tableau associatif". En Java, vous obtenez des tableaux associatifs en utilisant Map.

Qui est, vous pouvez conserver une Liste de vos tableaux, quelque chose comme:

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

Ou peut-être un peu plus près pour ce que vous êtes après, vous pouvez utiliser une Carte:

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..
20
répondu Mark Elliot 2010-04-26 03:55:47

D'autres ont déjà fourni de grandes réponses, mais juste pour couvrir toutes les bases, Java a un tableau de tableaux.

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

Maintenant, vous n'avez pas 5 variables nommées k1,k2, k3,k4,k5 chacun String[3]...

...mais vous ne disposez d'un tableau de String[],k[0],k[1],k[2],k[3],k[4] chacun String[3].

7
répondu polygenelubricants 2010-04-26 04:16:21

Le plus proche que vous obtiendrez en 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".

Notez que "3" n'est pas une variable, mais en conjonction avec l' map objet il fonctionne comme un ... en quelque sorte.

3
répondu Stephen C 2010-04-26 03:59:24

ce que vous voulez faire est appelé métaprogrammation - programmation d'un programme, que Java ne supporte pas (il ne permet les métadonnées que par le biais d'annotations). Cependant, pour un cas aussi facile à utiliser, vous pouvez créer une méthode qui prendra un int et retournera le tableau de chaîne que vous vouliez, par exemple en acccessant le tableau de tableaux. Si vous voulez une convention de nommage plus complexe, considérez l'instruction swtich pour quelques valeurs et la carte pour plus de valeurs. Pour nombre fixe de valeurs avec des noms personnalisés définir un Enum, qui peut être passé comme argument.

2
répondu Gabriel Ščerbák 2010-04-26 04:01:40