Was ist der richtige Weg, um eine neue Instanz einer generischen Klasse in Kotlin zu erstellen?

8

Ich benutze folgende Initialisierung:

%Vor%

aber es ist falsch und verursacht IllegalAccessException auf java.lang.Class.newInstance(Class.java:1208)

    
pawegio 18.11.2014, 10:29
quelle

1 Antwort

21

Wenn Sie IntelliJ explizite Typinformationen hinzufügen lassen, sehen Sie, dass entityClass vom Typ Class<Class<String>> ist. Ich bin mir nicht sicher, ob du das willst. In Zeile 2 erstellen Sie zuerst eine Instanz von Class<T> und dann eine von T , aber das ist sowieso nicht möglich, weil die generische Information über T zur Laufzeit verloren geht. Abgesehen davon können Sie Klassenobjekte nicht direkt instanziieren.

Lösung

Eine mögliche Lösung wäre, einen Parameter vom Typ Class<T> zu Ihrer Funktion oder Klasse hinzuzufügen und damit Objekte wie diese zu instanziieren.

%Vor%

Aber es gibt tatsächlich eine elegantere Lösung ohne die Verwendung von Reflexion. Definieren Sie einen Parameter des Methodentyps () -> T und verwenden Sie Konstruktorreferenzen. Hier ist meine verwandte Frage über Konstruktorreferenzen und hier ist der Code:

%Vor%     
Kirill Rakhman 18.11.2014, 17:45
quelle

Tags und Links