Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现在Kotlin中返回集合的Java方法_Java_Kotlin - Fatal编程技术网

实现在Kotlin中返回集合的Java方法

实现在Kotlin中返回集合的Java方法,java,kotlin,Java,Kotlin,我在用Kotlin和Spring Security。实施此方法时: public接口UserDetails扩展了Serializable{ Collection之所以有效,是因为Collection和MutableCollection都相当于java.util.Collection。您可以看到为java互操作映射的java类型的完整列表 这是因为不可变的集合接口实际上并不是不可变的(为此,您可能需要),但它们只是提供了一个只读接口(如您所注意的)。由于Java没有这种区别,所以两者都必须映射到相

我在用Kotlin和Spring Security。实施此方法时:

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也有其术语。Kotlin
    Collection
    接口被定义为
    Collection
    ,这意味着该接口是
    E
    类型的生产者。因此,具有:

    val列:集合=。。。
    
    与以下内容几乎相同:

    val列:MutableCollection=。。。
    
    我这么说几乎是因为,
    MutableCollection
    阻止任何人添加任何元素,但它并不阻止任何人完全改变集合。例如,您仍然可以对集合调用
    clear()


  • java.util.Collection
    等效的正确Kotlin返回类型是什么
  • Java没有声明站点差异,也没有区分可变集合和不可变集合(至少在接口级别上没有)

    这意味着,从技术上讲,以下Java类型的最佳匹配:


    Collection“对于您的Java客户机,这无关紧要:它们是等价的。”不完全一样;由于
    Collection
    的Java客户机的差异,请参见
    Java.util.Collection