在Kotlin中,当KeySetView与MultableSet具有不同的实现层次时,它们是如何工作的

在Kotlin中,当KeySetView与MultableSet具有不同的实现层次时,它们是如何工作的,kotlin,Kotlin,考虑以下几行 private val variable: MutableSet<String> = ConcurrentHashMap.newKeySet() private val变量:MutableSet=ConcurrentHashMap.newKeySet() MutableSet实现Set,MutableCollection和KeySetView实现Set,Collection如何将对象KeySetView分配给MutableSet,因为它们的类型不兼容 Kotl

考虑以下几行

   private val variable: MutableSet<String> = ConcurrentHashMap.newKeySet()
private val变量:MutableSet=ConcurrentHashMap.newKeySet()
MutableSet
实现
Set,MutableCollection
KeySetView
实现
Set,Collection
如何将对象
KeySetView
分配给
MutableSet
,因为它们的类型不兼容


Kotlin赋值中缺少什么?

Java没有只读集合类型,因此来自Java的集合相当于Kotlin中的可变集合。编译器提示将其描述为映射到类型
(可变)集
。括号中的单词Mutable表示您正在使用的Java代码可能不打算以可变的方式使用它,您应该检查javadocs中的方法,看看它是否表示“请勿修改返回集”,如果是这样,您应该将其视为只读Kotlin
Set


ConcurrentHashMap没有Kotlin标准库对应项,因此
newKeySet
是一个Java方法,返回一个Java集,它是Kotlin(可变)集。

Java没有只读集合类型,因此来自Java的集合相当于Kotlin中的可变集。编译器提示将其描述为映射到类型
(可变)集
。括号中的单词Mutable表示您正在使用的Java代码可能不打算以可变的方式使用它,您应该检查javadocs中的方法,看看它是否表示“请勿修改返回集”,如果是这样,您应该将其视为只读Kotlin
Set

ConcurrentHashMap没有Kotlin标准库对应项,因此
newKeySet
是一个Java方法,并返回一个Java集,它是Kotlin(可变)集