gpt4 book ai didi

android - MutableLiveData可以具有子类作为其类型吗?

转载 作者:行者123 更新时间:2023-12-02 13:30:34 24 4
gpt4 key购买 nike

当参数为MutableLiveData<Subclass>时,无法将MutableLiveData<Superclass>作为参数传递。问题是我的应用程序无法构建,并且出现以下错误: DataBinderMapperImpl错误:找不到符号。

这有效:
fun display(list: List<SuperClass>)
在调用instance.display(subClassList)

这不是:
fun display(liveData: MutableLiveData<Superclass>)
在调用instance.display(subClassLiveData)时。

为了澄清起见,如果不是LiveData,我可以将子类作为参数传递。但是,如果是LiveData,则无法构建我的应用。

最佳答案

当您的函数采用的参数类型类型不使用inout缩小时,除了该确切类型之外,您不能传递任何其他内容。

List和LiveData已经使用out类型(协变量)进行了定义,因此List<Subtype>符合List<Supertype>的资格,而LiveData<Subtype>符合LiveData<Supertype>的资格。

但是这些类的可变变体(MutableList和MutableLiveData)具有更改其中内容的方法,因此它们的类型必须能够进出。您不能允许父类(super class)型或子类型,因为它们会破坏一个方向的功能。

如果您这样定义函数:

fun display(list: MutableLiveData<out SuperClass>)

那么您就可以通过 MutableLiveData<Subclass>了。您只是无法从 setValue函数内部调用 display

关于android - MutableLiveData可以具有子类作为其类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61826705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com