Datentypen Static generic return value von Subclass?

capgeti

Mitglied
Hallo
ich habe eine sub und einer superclass.

in der Super steht sowas drin:
Java:
public static <T> T getTest() {
        return (T) new SuperClass("Hallo Welt");
    }

Aufrufen tu ich es so:
Java:
SuperClass.<SubClass>getTest();

Wie muss ich was umschreiben, damit ich als Rückgabe wert eine SubClass habe?
So funktioniert es leider nicht, da das Ergebnis vom Typ SuperSuperClass sein muss ^^.

Geht das irgendwie? Könnte man hierfür das factorypattern benutzen??

lg
 
SuperSuperClass == SuperClass?
Factory und sonstige nette Objektorientierung passt nicht zu static, ohne static ist viel mehr möglich, richtig,

hier wäre noch die Möglichkeit, ein Class-Object, Class<T>, oder eine sontige Info (String, Enum)
zu übergeben und dann per Reflection ein Objekt zu erzeugen oder per switch/ if/ else, falls alle Subklassen bekannt sind
 
Danke für deine Antwort 🙂

Die SuperClass erbt von der SuperSuperClass =)
Also 3 ebenen.

Vorher war:
SubClass extends SuperSuperClass

Da sich aber haufen Code in den SubClassen wiederholt, hab ich gedacht ich füg noch eine Zwischenebene ein.

Doch beim angaben von der SubClass brauch ich diese auch direkt. Von daher müsste ich in der SuperClass iwie eine Instanz von der SubClass bekommen.

Class<T> funktioniert nicht, da das durch das Framework nicht mehr, bzw nur noch eingeschränkt nutzbar ist (GWT). also kein getInstance() 😉

mit If/else wirds auch ni, da ich keine Lust habe in der SuperClass alle anzugeben -.-
Aber das ist vllt die einzigste möglichkeit.
Kennt vllt noch jemand nen Weg?

lg
 
was mit GWT nicht geht verstehe ich nicht,
wenn der Aufrufer die Klasse kennt und die Methode sie mehr oder weniger auch (soll ja ein Objekt davon erzeugen),
dann kann die Klasse in jedem Fall herumgereicht werden,

newInstance() funktioniert nicht wenn der Konstruktor einen String-Parameter braucht, aber über Reflection kann man den gewünschten Konstruktor aussuchen
 
Na GWT kann zwar Class objekte transportieren etc, aber sobald man newInstance() zb aufruft, sagt er, das diese Funktion nicht auf Clientseite ausgeführt werden kann.
Da er die funktion nach JS übersetzen müsste.

Reflection glaub ich genausowenig. Hab ich aber noch net angeguckt.
Hast du schnell ein beispiel parat? ^^

lg
 
wird dort eine Client/Server-Entfernung überwunden wie bei RMI? dass dann static überhaupt geht..

du kannst wie gesagt auch einen String übergeben und dann die Klasse dazu laden, aber alles zur Selbersuche 😉
 
String übergeben und Klasse laden?
Ne das ist net gut und unsauber ^^ Könnte man ja sonstwas damit machen ;O

Ich hab jetzt schon angefangen das ganze so umzustellen, das ich kein static mehr brauch.
vllt mach ich eher was abstraktes. Für weiteres suchen und rumprobieren hab ich leider keine zeit.
 
Das müsste gehen wenn du oben als returntyp T? angibst - aber es ist verd... lange her ich das doziert bekam.
Das heisst IMHO alle von T abgeleiteten Klassen - aber erwürgt mich nicht wenn ich falsch liege
 

Neue Themen


Zurück
Oben