使用List参数从Kotlin调用Java方法

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

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

IntelliJ通知我有关types不匹配:

types不匹配。
Required:(Mutuable)Set
find:列表

在Java中我的方法签名:

 void find(@Nonnull Set list); 

我知道这样做不好, 根据文档 ,我可以在Kotlin中使用MutableList 。 但是我也完全控制了Java代码,并希望更改Java代码以使用Kotlin的List

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

顺便说一句:是IntelliJ告诉我Required: (Mutuable)Set ? 什么是感叹号?

如果你真的想使用List,你需要改变你的Java方法的签名:

 void find(@Nonnull List list); 

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

 val set: Set = emptySet() repository.find(set) 

或者按照Jakob Bowyer的评论和回答,你可以让Kotlin推断出参数types:

 val set = emptySet() repository.find(set) 

为什么不这样做val list = emptySet() repository.find(list) // this call goes to a java class

如果你有一个List并且想把它传递给(java)函数,那么你可以使用toSet扩展函数转换列表:

 repository.find(list.toSet())