Java: à l'Aide d'une table de hachage, de la récupération de toutes les valeurs et les méthodes d'appel
J'ai un besoin de stocker une liste de créer dynamiquement des objets dans une voie où ils peuvent être récupérés et leurs méthodes appelées à la demande.
Aussi loin que je peux voir pour la liste et la création, d'une table de hachage correspond à mes besoins, mais je suis un peu perplexe sur l'rappelant les objets et en appelant leurs méthodes à l'aide de la table de hachage.
Tout comme une référence, laissez-moi vous donner un peu de code:
Voici la table de hachage:
Map<String, Object> unitMap = new HashMap<String, Object>();
//here is how I put an object in the Map notice i'm passing coordinates to the constructor:
unitMap.put("1", new Worker(240, 240));
unitMap.put("2", new Worker(240, 240));
Maintenant, j'ai besoin de créer une méthode qui récupère tous les objets dans la table de hachage et appeler une méthode à partir de chaque objet. est-ce possible ou peut les objets créés uniquement être référencé directement. Si oui, est-il un autre moyen d'appeler une méthode de toutes les instances d'une classe dynamiquement (en d'autres termes, sur la saisie de l'utilisateur)?
Désolé faute de frappe, je voulais faire chaque entrée une clé différente.
N'oubliez pas "d'accepter" une réponse que vous trouvez utile, de sorte que nous allons vous accueillir pour votre prochaine question! 🙂
OriginalL'auteur cody | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
Sûr. Vous pouvez faire ceci:
Si vous avez besoin de les touches trop, vous pouvez obtenir simplement les touches:
ou les clés et valeurs:
Dans tous les cas ci-dessus, chaque entrée de la carte est traversé un par un. Ainsi, à la fin de la boucle, vous allez avoir traité toutes les entrées de la carte.
Dans le troisième exemple,
entry.getValue()
est un objet de typeWorker
; dans le premier cas,thing
est également un objet de type Ouvrier. Si il y a unWorker::getCoord()
fonction de membre, alors vous pouvez direthink.getCoord()
ouentry.getValue().getCoord()
.SB dans mon code quand j'utilise le premier exemple, la chose est reconnue comme un objet, et non pas en tant que type de travailleur, donc quand j'utilise chose.getCoord(); il n'est pas reconnu en tant que membre de la fonction. Je suppose pire des cas, je peux juste créer une table de hachage pour chaque type d'objet, mais avez-vous une idée pourquoi sa ne marche pas pour chaque type d'objet?
Idéalement, vous utiliser une carte différente pour chaque type d'objet, si ces types ne sont pas liées. Mais en supposant que vous voulez simplement de les ranger comme
Object
s dans la carte, vous devez convertir l'objet vers la droite premier type. par exemple,if (thing instanceof Worker) { return ((Worker) thing).getCoord(); }
Ah parfait. Ok merci à tous pour votre aide, je pense que je vais réécrire à mettre en œuvre distincte HashMaps, ne devrait pas être trop de difficulté, et il va réellement avoir un couple d'avantages pour mon objectif.
OriginalL'auteur Chris Jester-Young
Si toutes les valeurs de la Carte sont
Worker
objets, vous devez déclarer votre carte pour être de typeMap<String, Worker>
. De cette façon, lorsque vous tirez une valeur en dehors de la carte, il sera tapé comme unWorker
. De cette façon, vous pouvez appeler n'importe quelle méthode déclarée surWorker
plutôt que d'avoir à vérifier le type à l'exécution à l'aide deinstanceof
.Si la carte détient des valeurs différentes, et vous avez besoin de garder le type de valeur que
Object
, il peut être avantageux d'utiliser une interface pour définir le mode que vous voulez l'appeler pour chaque type d'objet.Si vous ne savez pas quelle méthode vous voulez exécuter sur les valeurs jusqu'à l'exécution, et la carte peut contenir des valeurs différentes, vous aurez juste à faire ce que vous faites actuellement, et l'utilisation
Map<String, Object>
.Enfin, pour obtenir les valeurs de la carte, vous faites tout comme Chris Bouffon-Jeunes mentionné avant moi. Le plus grand avantage, comme je l'ai dit précédemment, c'est que vos objets seront dactylographiés, et vous n'avez pas besoin de coulée/instanceof vérification.
OriginalL'auteur nicholas.hauschild
Je l'utilise pour mettre toutes les valeurs de table de hachage sur une Liste, j'espère que ça aide.
OriginalL'auteur César Cobo