Je voudrais assigner un ensemble de variables en java comme suit :
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Comment puis-je réaliser cela en Java ?
Je voudrais assigner un ensemble de variables en java comme suit :
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Comment puis-je réaliser cela en Java ?
Ce n'est pas comme ça qu'on fait les choses en Java. Il n'y a pas de variables dynamiques en Java. Les variables Java doivent être déclarées dans le code source. 1 .
En fonction de ce que vous essayez de réaliser, vous devriez utiliser un tableau, un List
ou un Map
; par exemple
int n[] = new int[3];
for (int i = 0; i < 3; i++) {
n[i] = 5;
}
List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
n.add(5);
}
Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
n.put("n" + i, 5);
}
Il est possible d'utiliser la réflexion pour dynamiser se référer à les variables qui ont été déclarées dans le code source. Cependant, cette uniquement fonctionne pour les variables qui sont des membres de classe (c'est-à-dire les champs statiques et d'instance). Cela ne fonctionne pas pour les variables locales. Voir l'exemple "rapide et sale" de @fyr.
Cependant, faire ce genre de choses inutilement en Java est une mauvaise idée. C'est inefficace, le code est plus compliqué et, comme vous vous appuyez sur la vérification à l'exécution, il est plus fragile. Et il ne s'agit pas de "variables avec des noms dynamiques". Il s'agit plutôt d'un accès dynamique à des variables portant des noms statiques.
1 - Cette affirmation est légèrement inexacte. Si vous utilisez BCEL ou ASM, vous pouvez "déclarer" les variables dans le fichier bytecode. Mais ne le faites pas ! C'est la folie !
Merci beaucoup, j'ai trouvé ce que je cherchais. La dernière partie (Map<String, integer> ).
Il convient de noter que, même si cela est possible, ce n'est pas quelque chose que vous feriez réellement. Vous n'y gagnerez rien et vous perdrez en lisibilité. Si vous voulez les lier, utilisez un Map<String, T>
à la place, ne commencez pas à toucher à votre code actuel.
Si vous voulez accéder aux variables de manière dynamique, vous pouvez utiliser la réflexion. Cependant, Reflection ne fonctionne pas pour les variables locales. Il n'est applicable que pour les attributs de classe.
Voici un exemple simple et rapide :
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);
}
}
}
Vous devez améliorer ce code de diverses manières ; ce n'est qu'un exemple. Ce n'est pas non plus considéré comme un bon code.
Vous devez utiliser List
ou array
au lieu de
List<Integer> list = new ArrayList<Integer>();
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<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Pourriez-vous clarifier votre question ?
7 votes
Vous devez faire cela pour les variables locales ? Pourquoi pas les éléments d'un tableau ?
0 votes
@ Eng.Fouad : Je veux accéder aux variables par leur nom de manière dynamique.
0 votes
@Ashish Anand vous voulez dire stackoverflow.com/questions/6629995/