我想从某些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!>
?什么是感叹号?
答案 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())