Salut,
De curiosité, serais t-il possible d'accéder à une variable en utilisant son nom ?
Par exemple, je pourrais avoir un String qui contient la chaîne "unNombre" et l'idée serais d'utiliser cela pour récupérer le contenu de la variable unNombre.








Salut,
De curiosité, serais t-il possible d'accéder à une variable en utilisant son nom ?
Par exemple, je pourrais avoir un String qui contient la chaîne "unNombre" et l'idée serais d'utiliser cela pour récupérer le contenu de la variable unNombre.
Oui c'est possible par réflexion.
http://java.sun.com/developer/techni...LT/Reflection/
Mouais, c'est possible uniquement pour des champs d'instances, en aucun cas pour des variables locales.
Sinon Jimalexp, que dirais-tu d'utiliser plutôt une Map, qui est une collection stockant des paires <clé, valeur>.
Exemple (Java version >= 1.5):
Est ce que cela ne répondrait pas à ton besoin?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //stockage des valeurs Map<String, Integer> map = new HashMap<String, Integer>(); map.put("unNombre", 10); // des traitements //récupération des valeurs int unNombre = map.get("unNombre"); //la variable vaut 10
Tu voulais dire "variables static" ?
Même pour une variable static, on peut récupérer la valeur par réflexion.
Ci-joint un exemple
Par contre, la propriété doit être public...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11try { Field f = FtpConnection.class.getField("PORT_FTP"); Object v = f.get(null); <- pour une propriété static, l'instance sinon System.out.println(v); } catch (Exception e) { System.out.println(e.getMessage()); }
A+
EDIT:
Ci-dessous une version avec une propriété private
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 try { Field f = FtpConnection.class.getDeclaredField("PORT_FTP"); f.setAccessible(true); Object v = f.get(null); System.out.println(v); } catch (Exception e) { System.out.println(e.getMessage()); }
Non non il parle bien des variables locales (à une méthode) : on ne peut pas les récupérer par réflexion.
En même temps il n'y a pas vraiment d'intérêt à cela...
Pas forcément : la propriété doit être visible. cela respecte les mêmes règles de visibilité :
- On a le droit d'accéder par réflexion à un élément private depuis une méthode de la même classe.
- On a le droit d'accéder à un élément protected d'une classe parente.
- On a le droit d'accéder à un élément protected ou "package-only" d'une classe du même package.
- On a le droit d'accéder à un élément public de n'importe quelle classe
Toutefois on peut passer outre ces règles en forçant le "setAccessible(true)" (cela nécessite des permissions avec un SecurityManager). [edit] comme tu le signales dans ton [edit]
a++








Partager