Prendre des variables par nom à partir d'une Chaîne
Exemple de code:
int width = 5;
int area = 8;
int potato = 2;
int stackOverflow = -4;
Maintenant, dire que je veux avoir de l'utilisateur en entrée une chaîne de caractères:
String input = new Scanner(System.in).nextLine();
Alors, disent les entrées de l'utilisateur potato
. Comment pourrais-je récupérer la variable nommée potato
et faire des trucs avec elle? Quelque chose comme ceci:
System.getVariable(input); //which will be 2
System.getVariable("stackOverflow"); //should be -4
J'ai regardé certaines choses et ne pas trouver beaucoup de choses; j'ai trouvé une référence à quelque chose appelé "l'API Reflection", mais qui semble trop compliqué pour que ce simple tâche.
Est-il un moyen de le faire, et si oui, quel est-il? Si "Réflexion" ne fonctionne en effet et si c'est la seule manière de faire, alors comment pourrais-je l'utiliser pour ce faire? La page du tutoriel pour il a toutes sortes de interne des trucs que je ne peux pas donner un sens.
EDIT: j'ai besoin de garder le String
s dans les variables pour ce que je suis en train de faire. (Je ne peux pas utiliser un Map
)
Non, vous voulez utiliser un
Map
de chaînes à ints. La réflexion est trop pour cette tâche.Vous pouvez ajouter vos valeurs dans un dictionnaire. Ainsi, vous obtenez une paire de clés de valeur.
Carte. simple et agréable.
Je ne pense pas que ce soit possible via la réflexion pour les variables de la méthode, seuls les attributs de classe...
OriginalL'auteur Doorknob | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
L'aide de la réflexion ne semble pas être une bonne conception pour ce que vous faites ici. Il serait préférable d'utiliser un
Map<String, Integer>
par exemple:Ou avec Goyave:
Ou avec un enum:
String
s dans la variable pour ce que je suis en train de faire.Pensez à utiliser un enum (voir mon edit) - que vous obtient plus près.
OriginalL'auteur Paul Bellora
Au lieu d'essayer de trouver la valeur d'un nom de variable, pourquoi ne pas utiliser une Carte avec une paire clé/valeur?
Ensuite, vous pouvez accéder aux intrants comme suit:
Map<String, Integer>
en Java.OriginalL'auteur mbumiller
Les noms de variables sont disponibles uniquement au compilateur de temps. La réflexion ne donne accès qu'aux déclarations de classe et les éléments déclarés à l'intérieur d'eux, mais pas pour les variables locales. Je soupçonne qu'un
Map
d'une certaine sorte, sera une solution plus appropriée à votre problème réel. Plus précisément, découvrezHashMap
etTreeMap
.OriginalL'auteur Code-Apprentice
Très redondant, mais vous pouvez garder vos noms de variable lors de l'utilisation d'une carte:
Mais une déclaration comme ceci:
ne serait pas modifier la valeur de la Carte:
Seulement un nouvel appel de mettre des correctifs:
OriginalL'auteur jlordo
J'ai une solution pour ce problème qui ne fait pas intervenir à l'aide d'une carte. Je suis tombé sur cette technique, car nous avons eu plusieurs variables qui doivent être mise à jour basé sur quelque chose dans le nom de la variable elle-même. Cependant, la meilleure façon de le faire est d'utiliser les getters/setters plutôt que les variables.
Après la création de votre classe, vous pouvez accéder aux méthodes par une Méthode de création d'objets et de faire appel à eux individuellement.
OriginalL'auteur Robert Greathouse
J'ai une autre solution sans carte :
OriginalL'auteur LMD