如何 return 来自 linkedSetOf 的 MutableSet 与列表数据?

How to return MutableSet from linkedSetOf with list data?

"I'm preparing to create a MutableSet,how can i return it from a LinkedHashSet?"

"There is List data,then i tried to create a MutableSet from a LinkedHashSet with the list data."

在 Java 中,我创建了一个这样的集合:

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);
        }
    }

在kotlin中,我写了这样的代码:

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 compiler:Required:Item,Found:ArrayList!

提示类型不匹配

或者我需要这样做吗?:

mItems = linkedSetOf(saved) as MutableSet<Item>

我使用隐蔽的 java 到 kotlin,它生成如下代码:

mItems = LinkedHashSet(saved)

但是 LinkedHashSet 来自 java.util.LinkedHashSet,kotlin 中是否有一些更惯用的方法?

你可以写linkedSetOf(*saved.toTypedArray())。不确定它是否更地道 :) 在 Kotlin 中使用 Java 中的一些东西是可以的。在下面,linkedSetOf 也使用 LinkedHashSet

当您请求 MutableSet 时,Kotlin 总是会创建一个 LinkedHashSet,因此您可以只使用标准方法。

private lateinit var mItems: MutableSet<Item>

public override fun onCreate(bundle: Bundle?) {
    mItems = bundle?.getParcelableArrayList(STATE_SELECTION)
                   ?.toMutableSet() ?: mutableSetOf()
}