使用列表参数从{Kotlin调用Java方法

时间:2016-07-26 13:51:06

标签: java list kotlin

我想从某些kotlin代码中调用Java方法

val list: List<String> = emptyList()
repository.find(list) // this call goes to a java class

IntelliJ告诉我类型不匹配的问题:

  

类型不匹配。
   必需:(可变)设置&lt; String!&gt;
   找到:List&lt; String&gt;

我在Java中的方法签名:

void find(@Nonnull Set<String> list);

我知道这不能很顺利according to the doc,我可以在Kotlin中使用 MutableList 。但我也完全控制了Java代码,并希望更改Java代码以使用Kotlin的 List

Java方法签名如何接受Kotlin的List?

顺便说一下:是的,IntelliJ告诉我Required: (Mutuable)Set<String!>?什么是感叹号?

3 个答案:

答案 0 :(得分:4)

如果您确实想使用List,则需要更改Java方法的签名:

void find(@Nonnull List<String> list);

另一方面,您可以在Kotlin中更改变量的声明:

val set: Set<String> = emptySet()
repository.find(set)

或者根据Jakob Bowyer的评论和回答,你可以让Kotlin推断出论证类型:

val set = emptySet<String>()
repository.find(set)

答案 1 :(得分:1)

为什么不呢 val list = emptySet<String>() repository.find(list) // this call goes to a java class

答案 2 :(得分:0)

如果您有List并希望将其传递给Set的(java)函数,则可以使用toSet扩展函数转换列表:

repository.find(list.toSet())