La fonction modifiée de kotlin ne peut pas être appelée depuis java.

Reified type parameters kotlin a un modificateur appelé reified. La page officielle est ici

Reified peut être donné aux génériquesT et peut être traité comme une classe de type réelle, de sorte que vous pouvez convertir avec T, vérifier l'instance de T avec l'instruction if, etc. Je vais.

Par exemple, il peut être défini comme suit.

// 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
}

Si vous appelez ça de kotlin


val nums = listOf(1, 2f, 3, 4f)
val ints = nums.filterIsInstance<Int>() // [1, 3]

Mais quand j'essaye d'appeler ça depuis java


List nums = Arrays.asList(1, 2f, 3, 4f);
List ints = ListExtKt.filterIsInstance(nums); // error: filterIsInstance has private access in ListExtKt

Reified dans kotlin ne peut être donné qu'à la fonction en ligne, et il sera possible d'accéder à la classe de type réelle en la développant en ligne. Lorsque vous appelez la fonction inline de kotlin depuis java, la fonction inline est appelée directement, elle n'est donc pas développée en ligne. Par conséquent, il semble qu'une erreur se produit lors de la tentative d'appel d'une fonction avec vérifié à partir de java.

Recommended Posts

La fonction modifiée de kotlin ne peut pas être appelée depuis java.
[Java] Les méthodes protégées ne peuvent pas toujours être appelées depuis une sous-classe
Java Stream ne peut pas être réutilisé.
Appeler la classe scellée de Kotlin depuis Java
Java sera impliqué dès aujourd'hui
Impossible d'installer Java sur Ubuntu 13.04
Code Java qui ne peut pas être utilisé depuis Kotlin (pour les sessions d'étude en interne)
[Android] Appeler la méthode d'argument par défaut de Kotlin depuis Java
[Java] Scènes qui ne peuvent pas être réaffectées (essentiellement définitives)
Développement de serveur Minecraft BE de PHP à Java
Pourquoi la comparaison de classe de type chaîne Java (==) ne peut pas être utilisée