Die geänderte Funktion von kotlin kann nicht von Java aus aufgerufen werden.

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

Die geänderte Funktion von kotlin kann nicht von Java aus aufgerufen werden.
[Java] Geschützte Methoden können nicht immer innerhalb einer Unterklasse aufgerufen werden
Java Stream kann nicht wiederverwendet werden.
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Java soll ab heute dabei sein
Java kann unter Ubuntu 13.04 nicht installiert werden
Java-Code, der nicht von Kotlin verwendet werden kann (für interne Lernsitzungen)
[Android] Rufen Sie Kotlins Standardargumentmethode von Java aus auf
[Java] Szenen, die nicht neu zugewiesen werden können (im Wesentlichen endgültig)
Minecraft BE Serverentwicklung von PHP nach Java
Warum der Klassenvergleich vom Typ Java String (==) nicht verwendet werden kann