【问题标题】:Android cast MutableLiveData<MutableSet>> to LiveData<Set>>Android 将 MutableLiveData<MutableSet>> 转换为 LiveData<Set>>
【发布时间】:2021-12-28 18:43:36
【问题描述】:

我正在使用可变阴影,我有类似的东西

val selectedEntryIds: LiveData<Set<Long>>
    get() = _selectedProductIds

private val _selectedProductIds = MutableLiveData<MutableSet<Long>>(mutableSetOf())

但是我收到一个错误提示类型不匹配。

【问题讨论】:

    标签: android kotlin generics


    【解决方案1】:

    像这样使用方差注释out

        val selectedEntryIds: LiveData<out Set<Long>>
            get() = _selectedProductIds
    

    告诉编译器 LiveData 只会产生这样一个集合。检查:

    https://kotlinlang.org/docs/generics.html#declaration-site-variance

    【讨论】:

    • 不知怎的,我完全一头雾水,只声明了 LiveData 类型。谢谢!
    【解决方案2】:

    您可以执行以下操作

    val selectedEntryIds: LiveData<Set<Long>>
        get() = _selectedProductIds as LiveData<Set<Long>>
    
    private val _selectedProductIds = MutableLiveData<MutableSet<Long>>(mutableSetOf())
    

    MutableLiveData&lt;..&gt; 转换为常规的LiveData&lt;..&gt; 对象。

    【讨论】:

    • 这可行,但确实会引发未经检查的演员表警告
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多