使用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
如果你有一个List
并且想把它传递给(java)函数,那么你可以使用toSet
扩展函数转换列表:
repository.find(list.toSet())