Reified type parameters kotlin hat einen Modifikator namens "reified". Die offizielle Seite ist hier
Reified kann an genericsT
übergeben und als tatsächliche Typklasse behandelt werden. Sie können also mit T
umwandeln, die Instanz von T
mit der if-Anweisung überprüfen usw. Ich werde.
Zum Beispiel kann es wie folgt definiert werden.
// ListExt.kt
inline fun <reified T> List<T>.filterInstance(): List<T> {
val destination = mutableListOf<T>()
this.forEach {
if (it is T) destination.add(it)
}
return destination
}
Wenn Sie dies von Kotlin nennen
val nums = listOf(1, 2f, 3, 4f)
val ints = nums.filterIsInstance<Int>() // [1, 3]
Aber wenn ich versuche, dies von Java aus aufzurufen
List nums = Arrays.asList(1, 2f, 3, 4f);
List ints = ListExtKt.filterIsInstance(nums); // error: filterIsInstance has private access in ListExtKt
Reified
in kotlin kann nur der Inline-Funktion zugewiesen werden, und es ist möglich, auf die tatsächliche Typklasse zuzugreifen, indem sie inline erweitert wird.
Wenn Sie die Inline-Funktion von kotlin aus Java aufrufen, wird die Inline-Funktion direkt aufgerufen, sodass sie nicht inline erweitert wird. Daher scheint es, dass ein Fehler auftritt, wenn versucht wird, eine von Java verifizierte Funktion aufzurufen.
Recommended Posts