Wie generische Parameterklasse in Kotlin erhalten wird

9

Firebases snapshot.getValue() erwartet, wie folgt aufgerufen zu werden:

%Vor%

Ich möchte jedoch Person durch einen generischen Parameter ersetzen, der über die Klassen-Deklaration, d. h.

, an die Klasse übergeben wird %Vor%

und verwenden Sie diesen generischen Parameter, um so etwas zu tun:

%Vor%

Aber wenn ich versuche, bekomme ich einen Fehler, der besagt, dass

  

Nur Klassen können auf der linken Seite eines Klassenliterals verwendet werden

Ist es möglich, eine Klassenbeschränkung für den generischen Parameter wie in C # anzugeben oder gibt es eine andere Syntax, die ich verwenden kann, um die Typinformation für den generischen Parameter zu erhalten?

    
Jaja Harris 06.12.2015, 20:40
quelle

2 Antworten

12

Was Sie brauchen, ist ein verifizierter Modifikator für Ihren generischen Parameter, den Sie hier lesen können. Ссылка Also wenn du so etwas machst:

%Vor%

Sie erhalten den Namen der tatsächlichen Aufruferklasse, nicht "Objekt".

    
Yaroslav 06.12.2015, 21:32
quelle
11

Für eine Klasse mit dem generischen Parameter T können Sie dies nicht tun, weil Sie keine Typinformation für T haben, da die JVM die Typinformation löscht. Daher kann Code wie dieser nicht funktionieren:

%Vor%

Aber Sie können das machen, wenn der Typ von T verdinglicht und innerhalb einer Inline-Funktion verwendet wird:

%Vor%

Beachten Sie, dass die Inline-Funktion public nur auf öffentliche Member der Klasse zugreifen kann. Aber Sie können zwei Varianten der Funktion haben, eine, die einen Klassenparameter empfängt, der nicht inline ist und auf private Interna zugreift, und eine weitere Inline-Hilfsfunktion, die die Verdinglichung aus dem abgeleiteten Typparameter durchführt:

%Vor%

Sie können auch KClass anstelle von Class verwenden, so dass Anrufer, die nur Kotlin-only sind, einfach MyClass::class anstelle von MyClass::class.java

verwenden können

Wenn die Klasse mit der Inline-Methode für die Generika zusammenarbeiten soll (dh, die Klasse Storage speichert nur Objekte vom Typ T ):

%Vor%

Der Link zu verdinglichten Typen in Inline-Funktionen: Ссылка

    
Jayson Minard 25.12.2015 13:40
quelle

Tags und Links