Invoque el método Java de Kotlin con parámetro de list
Quiero llamar a un método Java desde algún código de kotlin
val list: List<String> = emptyList() repository.find(list) // this call goes to a java class
IntelliJ me está informando sobre un desajuste de tipo:
- ¿Cómo convertir una list borrada por types a una matriz en Kotlin?
- Kotlin: Cómo trabajar con los cambios de Lista: Lanzamiento no seleccionado: kotlin.collections.List <Kotlin.Any?> A kotlin.colletions.List <Waypoint>
- en kotlin, cómo devolver un MutableList donde el destino espera una list
- Kotlin - Sort MutableList basado en Object Property
- ExpandableListView no se muestra en mi actividad
Escriba desajuste.
Requerido: (Mutuable) Establecer <String!>
Encontrado: Lista <String>
Mi firma de método en Java:
void find(@Nonnull Set<String> list);
Entiendo que esto no puede ir bien y de acuerdo con el documento , podría usar una MutableList en Kotlin. Pero también tengo control total sobre el Código Java y me gustaría cambiar el código Java para que funcione con la Lista de Kotlin.
¿Qué apariencia tiene la firma de un método Java para aceptar la Lista de Kotlin?
Por cierto: was is IntelliJ diciéndome con Requinetworking: (Mutuable)Set<String!>
? ¿Para qué sirve el signo de exclamación?
Si realmente desea utilizar una list, debe cambiar la firma de su método Java:
void find(@Nonnull List<String> list);
Por otro lado, puede cambiar la statement de su variable en Kotlin:
val set: Set<String> = emptySet() repository.find(set)
O por el comentario y la respuesta de Jakob Bowyer, puedes dejar que Kotlin infiera el tipo de argumento:
val set = emptySet<String>() repository.find(set)
¿Por qué no val list = emptySet<String>() repository.find(list) // this call goes to a java class
Si tiene una List
y desea pasarla a la function (java) tomando un Set
, puede convertir la list con la function de extensión de establecer:
repository.find(list.toSet())