“我正在准备创建MutableSet,如何从LinkedHashSet中返回它?”
“有列表数据,然后我尝试从具有列表数据的LinkedHashSet创建一个MutableSet。”
在Java中,我创建一个这样的Set:
private Set<Item> mItems;
public void onCreate(Bundle bundle) {
if (bundle == null) {
mItems = new LinkedHashSet<>();
} else {
List<Item> saved = bundle.getParcelableArrayList(STATE_SELECTION);
mItems = new LinkedHashSet<>(saved);
}
}
在科特林,我写了这样的代码:
var mItems: MutableSet<Item>? = null
fun onCreate(bundle: Bundle?) {
if (bundle == null) {
mItems = linkedSetOf()
} else {
val saved = bundle.getParcelableArrayList<Item>(STATE_SELECTION)
mItems = linkedSetOf(saved)
}
}
但是AndroidStudio编译器发出类型不匹配警报:Required:Item,Found:ArrayList!
还是我需要这样做?:
mItems = linkedSetOf(saved) as MutableSet<Item>
我使用隐蔽的Java编写Kotlin,它会生成如下代码:
mItems = LinkedHashSet(saved)
但是LinkedHashSet来自java.util.LinkedHashSet,kotlin中是否有一些更惯用的方法?
答案 0 :(得分:0)
您可以写linkedSetOf(*saved.toTypedArray())
。不知道它是否更惯用:)可以在Kotlin中使用Java中的某些东西。在下面,linkedSetOf
也使用LinkedHashSet
。
答案 1 :(得分:0)
当您要求LinkedHashSet
时,Kotlin始终会创建一个MutableSet
,因此您可以使用标准方法。
private lateinit var mItems: MutableSet<Item>
public override fun onCreate(bundle: Bundle?) {
mItems = bundle?.getParcelableArrayList(STATE_SELECTION)
?.toMutableSet() ?: mutableSetOf()
}