实现在Kotlin中返回集合的Java方法
我在用Kotlin和Spring Security。实施此方法时:实现在Kotlin中返回集合的Java方法,java,kotlin,Java,Kotlin,我在用Kotlin和Spring Security。实施此方法时: public接口UserDetails扩展了Serializable{ Collection之所以有效,是因为Collection和MutableCollection都相当于java.util.Collection。您可以看到为java互操作映射的java类型的完整列表 这是因为不可变的集合接口实际上并不是不可变的(为此,您可能需要),但它们只是提供了一个只读接口(如您所注意的)。由于Java没有这种区别,所以两者都必须映射到相
public接口UserDetails扩展了Serializable{
Collection之所以有效,是因为Collection
和MutableCollection
都相当于java.util.Collection
。您可以看到为java互操作映射的java类型的完整列表
这是因为不可变的集合接口实际上并不是不可变的(为此,您可能需要),但它们只是提供了一个只读接口(如您所注意的)。由于Java没有这种区别,所以两者都必须映射到相同的Java平台类型
与java.util.Collection
等效的正确Kotlin返回类型是什么
正确的返回类型取决于您希望向Kotlin客户端公开的接口。如果他们不应该对返回的集合进行变异,请使用collection
。如果您希望他们对其进行变异,请使用MutableCollection
。对于您的Java客户端,这并不重要:它们是等价的
为什么在这里使用kotlin.collections.Collection
不会导致错误
如果您不知道,Kotlin中的可变和不可变集合接口在Java中都解析为一个接口。因此,Kotlin的collection
和MutableCollection
在Java中都是Java.util.collection
,Kotlin的List
和MutableList
在Java中都是Java.util.List
,一个等等
此外,Kotlin也有其术语。KotlinCollection
接口被定义为Collection
,这意味着该接口是E
类型的生产者。因此,具有:
val列:集合=。。。
与以下内容几乎相同:
val列:MutableCollection=。。。
我这么说几乎是因为,MutableCollection
阻止任何人添加任何元素,但它并不阻止任何人完全改变集合。例如,您仍然可以对集合调用clear()
与java.util.Collection
等效的正确Kotlin返回类型是什么
Java没有声明站点差异,也没有区分可变集合和不可变集合(至少在接口级别上没有)
这意味着,从技术上讲,以下Java类型的最佳匹配:
Collection“对于您的Java客户机,这无关紧要:它们是等价的。”不完全一样;由于Collection
的Java客户机的差异,请参见Java.util.Collection