Ich habe versucht zu verstehen, ob es möglich ist, eine Methode zu erstellen, die basierend auf der Rückgabe-Klasse einen generischen Typ ableitet und eine statische Methode dieses generischen Typs aufruft.
d. Im Folgenden erstelle ich zwei Klassen, die beide die Methoden getInstances und getAllInstances implementieren. Ich versuche dann, die Methoden aus einem generischen Wrapper zu erstellen. Es scheint, dass die Superklassenmethode immer unabhängig vom Rückgabetyp ausgeführt wird.
Zum Beispiel
%Vor%UnterklasseA
%Vor%Wrapper - Zeigt das Problem an
%Vor%Beim Ausführen von Wrapper erhalte ich den folgenden Fehler:
Ausnahme im Thread "main" java.lang.ClassCastException: ParentClass kann nicht in SubclassA umgewandelt werden bei Wrapper.main (Wrapper.java:20)
Kann ich das in Java machen?
Ihr Ansatz ist falsch, es gibt keine Vorstellung von static Inheritance
in Java, da die Vererbung immer im Kontext der Object-Ebene steht. Nur Membermethoden (nicht statisch) können von Unterklassen mit entsprechenden Zugriffsmodifikatoren vererbt werden.
Aktualisierung: Darüber hinaus scheint das Fabrikmuster in Ihrem Szenario geeigneter zu sein als das Anpassen von Generika zum Abrufen / Konstruieren bestimmter Klassenobjekte.
Nein, du kannst es nicht so machen. Damit es funktioniert, können Sie das Klassenobjekt übergeben:
%Vor%Außerdem haben Sie in Ihrem Beispiel äquivalente statische Methoden in übergeordneten Klassen und Unterklassen. Die Methoden der Unterklasse überschreiben nicht die Methoden der Elternklasse, sie verstecken sie nur, und das ist fast sicher nicht das, was Sie wollen. Dieser Ansatz der Utility-Klasse geht um dies herum.
Tags und Links java generics static-methods