Java: die Verwendung einer hashmap, abrufen aller Werte und aufrufen von Methoden
Ich habe ein Bedürfnis zur Speicherung einer Liste von dynamisch erzeugten Objekte in einer Weise, wo Sie können alle abgerufen werden, und deren Methoden, die bei Bedarf aufgerufen.
Soweit ich sehen kann, für die Liste und Schöpfung, eine HashMap passt meine Bedürfnisse aber ich bin ein wenig verwirrt zum abrufen der Objekte und den Aufruf Ihrer Methoden mit der HashMap.
Nur als Referenz, lassen Sie mich Ihnen ein wenig code:
Hier wird die HashMap:
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));
Nun brauche ich, um eine Methode zu erstellen, ruft jedes Objekt in der hashmap und Aufruf einer Methode von jedem Objekt. ist dies möglich oder können die erstellten Objekte nur direkt verwiesen werden. Wenn ja, gibt es eine andere Möglichkeit zum aufrufen einer Methode von allen existierenden Instanzen einer Klasse dynamisch (in anderen Worten, auf Benutzereingaben)?
Sorry Tippfehler, ich meinte, um jeden Eintrag einen anderen Schlüssel.
Vergessen Sie nicht auf "akzeptieren" eine Antwort, die Sie nützlich finden, so werden wir Sie begrüßen Sie zurück für deine nächste Frage! 🙂
InformationsquelleAutor cody | 2011-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher. Sie können dies tun:
Wenn Sie brauchen den Schlüssel zu, Sie können nur die Tasten:
oder beide Schlüssel und Werte zusammen:
In allen oben genannten Fällen, jeden Eintrag in der map Durchlaufen wird. So wird am Ende der Schleife, müssen Sie verarbeitet alle Einträge in der Karte.
In der Dritten Instanz,
entry.getValue()
ist ein Objekt vom TypWorker
; in der ersten Instanzthing
ist ebenfalls ein Objekt vom Typ Worker. Wenn es eineWorker::getCoord()
member-Funktion, dann hätten Sie sagen könnenthink.getCoord()
oderentry.getValue().getCoord()
.SB in meinem code, wenn ich das erste Beispiel, was ist, nur erkannt wird als ein Objekt, und nicht als Art-worker, also wenn ich Sache.getCoord(); es ist nicht als Mitglied erkannt werden-Funktion. Ich denke schlimmsten Fall kann ich Sie erstellen einfach eine hashmap, die für jeden Objekttyp, aber Sie haben und Ahnung, warum es funktioniert nicht für jeden Objekt-Typ?
Ideal wäre, wenn Sie würde verwenden Sie eine andere Karte für jedes Objekt geben, wenn diese Typen beziehen sich nicht auf alle. Aber vorausgesetzt, Sie wollen einfach nur zum verstauen der Sie als
Object
s in die Karte, die Sie casten soll das Objekt auf der rechten Seite geben Sie zuerst. z.B.if (thing instanceof Worker) { return ((Worker) thing).getCoord(); }
Ah perfekt. Ok danke für deine Hilfe, ich denke, ich werde umschreiben zu implementieren separate HashMaps, sollte nicht sein, dass viel Mühe, und es wird tatsächlich ein paar Vorteile für mein Ziel.
InformationsquelleAutor Chris Jester-Young
Wenn alle Werte in der Karte sind
Worker
Objekte, sollten Sie erklären, Ihre Karte zu sein der TypMap<String, Worker>
. Auf diese Weise, wenn Sie ziehen Sie einen Wert aus der Karte, es wird eingegeben wie eineWorker
. Auf diese Weise können Sie jede Methode aufrufen, erklärte aufWorker
im Gegensatz zu, überprüfen Sie den Typ zur Laufzeit mitinstanceof
.Wenn die Karte besitzt verschiedene Werte, und Sie müssen halten Sie den Wert-Typ, wie
Object
, kann es vorteilhaft sein, eine Schnittstelle zu definieren, die Methode, die Sie aufrufen möchten, für jeden Objekt-Typ.Wenn Sie nicht wissen, was Methode, die Sie ausführen möchten, auf die Werte erst zur Laufzeit, und die Karte halten kann unterschiedliche Werte, Sie müssen nur zu tun was Sie gerade tun, und verwenden Sie
Map<String, Object>
.Schließlich, um die Werte der Karte, die du gerade machst, wie Chris Jester-Jungen erwähnt vor mir. Der größte Vorteil, wie ich vorher sagte, ist, dass Ihre Objekte eingegeben werden, und Sie haben keine Notwendigkeit für casting/instanceof überprüfen.
InformationsquelleAutor nicholas.hauschild
Ich benutze dies, um alle Werte aus hashMap in einer Liste, hoffe es hilft.
InformationsquelleAutor César Cobo