Java: wie haben ein array von Unterklasse-Typen?
Sagen ich habe eine super-Klasse "Tier" und Unterklassen "Katze", Hund, Vogel". Gibt es eine Möglichkeit, ein array von Unterklasse-Typ eher als Instanzen der Klasse mit denen ich in der Lage sein zu instanziieren Instanzen jeder möglichen Unterklasse?
Zu vereinfachen, möchte ich dieses:
Pseudo code: For each possible subclass of "Animal": create an instance of that class.
Wie kann ich das tun?
Edit: ich möchte nicht ein array von Instanzen dieser Unterklassen, ich möchte ein array mit den Objekt-Typ.
Polymorphismus....
es ist nicht klar, Ihre Frage
Dies scheint zu sein, eine Arbeit zu Hause oder Abtretung.
Was Sie Jungs nicht machen Tier-und Mitarbeiter-Klassen die ganze Zeit?
AFAIK gibt es keine Möglichkeit, programmgesteuert zu entdecken, die alle Unterklassen eines bestimmten Typs.
es ist nicht klar, Ihre Frage
Dies scheint zu sein, eine Arbeit zu Hause oder Abtretung.
Was Sie Jungs nicht machen Tier-und Mitarbeiter-Klassen die ganze Zeit?
AFAIK gibt es keine Möglichkeit, programmgesteuert zu entdecken, die alle Unterklassen eines bestimmten Typs.
InformationsquelleAutor Mickael Bergeron Néron | 2013-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach OP Kommentar
ES gibt KEINEN WEG, UM ALLE SUBTYPEN EINER KLASSE auch mit der spiegelung.
Aber Sie können es tun, indem Sie einen anderen Weg , Sie können sagen, das ist der einzige, aber längsten Weg.
Antwort vor OP ' s Kommentar
Ihre Frage ist nicht klar, aber ich Schätze, Sie verwenden möchten, array oder einer Collection gespeichert wird, alle Instanzen ist es sogar die Instanz vonsuperclass
odersubclass
.Dann vermute ich, müssen Sie dies so tun.Dieser code ist getestet
Hinweis: im Hinterkopf Behalten, dass nicht übergeordnete Klasse prüfen, wie im Falle von Beispiel-code
(list.get(i) instanceof Animal)
oben, sonst wird es passieren beiden Fällen (wenn Prüfungen sind nur, wenn-wenn-wenn) oder skip einem Fall(und immer wieder das Objekt als ein Tier, wenn überprüft werden if-else-if-else-if)(list.get(i) instanceof Animal)
und(list.get(i) instanceof Cat)
Wenn die Rückgabe-Objekt ist ein Cat-Objekt.InformationsquelleAutor Freak
Können Sie Ploymorphism zu erreichen.
Grundsätzlich alle Unterklassen von Tier-Klasse. Wann wollen Sie zum abrufen der Objekte können Sie einfach typecaset es
Wissen der Klasse, können Sie einfach verwenden getClass () - Methode. Zum Beispiel
drucken
class Dog
.InformationsquelleAutor Aniket Thakur
Wie bereits erwähnt in einer anderen Antwort, dies ist nicht möglich, mit rein Reflexion.
Es sei denn, Sie können Ihre Klassen, um speziell in diesem Fall behandeln, würden Sie brauchen, um zu Tauchen entweder in der Iteration über Klassen aus dem class-loader, oder mit einem benutzerdefinierten class loader fügt hinzu, dass die Informationen in eine interne Datenstruktur, so dass, wenn Sie beantragt wird, später werden Sie nicht haben, zu wiederholen, über alle Klassen.
Vorausgesetzt, Sie sind nicht interessiert an Tauchen in den class-loader-code (es klingt wie Sie nicht sind), ist die nächste beste Weg, dies zu tun ist das hinzufügen von statischen code in Ihre Klassen, die ausgeführt wird beim laden von Klassen, die Zeit. Zum Beispiel:
Wäre dies im Grunde das, was Sie tun würden, mit einem benutzerdefinierten class loader, wo dieser code würde live in der class-loader anstelle der Klasse.
Wiederholen Sie dieses Muster für alle Unterklassen. Dann, wenn Sie wollen, um Instanzen zu erstellen, Sie haben erstklassige Referenzen innerhalb der
subclasses
Liste, die Sie instanziieren mitClass.newInstance
(oder einem anderen geeigneten Reflexions-Methode, wenn Ihre Konstruktoren haben Argumente).InformationsquelleAutor Krease