Zunächst weiß ich, dass Sie Typ als Parameter übergeben können, indem Sie Class<T>
verwenden. Allerdings habe ich ein Szenario wie folgt:Prozessparameter als Typen
nehme ich an, ein Verfahren für die Erstellung von MyOwnType haben (der Code kompiliert unten):
public MyOwnType<? extends Type,? extends Type> createMyOwnType(String name, Class<? extends Type> T1, Class<? extends Type> T2)
Was ich wirklich tun wollen ist Typ Variablen T1 verwenden und T2 MyOwnType zu konstruieren:
MyOwnType<T1,T2>
ich weiß, dass Sie direkt MyOwnType ohne createMyOwnType Verfahren konstruieren können. Aber ich möchte ein richtiges Factory-Muster verwenden, um MyOwnType für Benutzer zu erstellen + ein paar Einschränkungen, die ich aufschlüsseln werde.
Ich möchte nicht alle Parameter eins nach dem anderen überprüfen, sagen, wenn T1 ein Typ ist, und T2 ist ein Typ, dann Construct MyOwnType. Weil ich in einigen Fällen viele Ts haben könnte, sind sie alle Subtypen von Type. Daher werde ich T1xT2xT3xT_n Kombinationen zu überprüfen haben.
Daher meine Frage ist, dass ist es eine Möglichkeit, MyOwnType zu schaffen auf der Grundlage der Parameter zur Verfügung gestellt (T1 und T2), etwas Ähnliches wie den folgenden Code:
MyOwnType<T1,T2> myowntype=new MyOwnType<T1,T2>(name);
Der obige Code wird nicht durch kompilieren zu dem Java-Compiler kann Symbol T1, T2 nicht finden.
Die einzige Möglichkeit dies zu tun ist, wenn Sie den gleichen Konstruktor für jeden Subtyp des Typs –
bieten. Starker Vorschlag: Erwägen Sie die Verwendung von Reflexion: [Was ist Reflexion und warum ist es nützlich?] (Http://stackoverflow.com/ Fragen/37628/Was-ist-Reflexion-und-warum-ist-es-nützlich) – paulsm4
Ich bin mir nicht sicher, was Sie erwarten, dass Ihr Code zu tun. Denken Sie daran, dass die Methode zur Laufzeit wegen [type erasure] (https://docs.oracle.com/javase/tutorial/java/generics/erasure.html) nur 'public ist MyOwnType createMyOwnType (String name, Klasse T1, Class T2) ', dh der Rückgabetyp ist nur eine MyOwnType-Klasse/Schnittstelle, die nicht von" T1 "und" T2 "abhängt. – Andreas