Android LiveData不会将类型推断为所需的返回值

Android LiveData不会将类型推断为所需的返回值,android,firebase,kotlin,mvvm,android-livedata,Android,Firebase,Kotlin,Mvvm,Android Livedata,我在viewModel中调用了emit(),但我不知道为什么LiveDataScope返回资源 我在另一个类中以同样的方式实现了livedata,但它返回的很好,我尝试了清除缓存并重新启动、清理和重建,但它始终返回相同的结果 为什么不能正确推断类型?它推断正确。您的代码向Kotlin建议LiveData可以生成两种不同类型的对象。你有这个: emit(artistList) 这是: emit(Resource.error("Error: ",e.message)) Kotlin可以从中推断出

我在viewModel中调用了
emit()
,但我不知道为什么
LiveDataScope
返回
资源

我在另一个类中以同样的方式实现了livedata,但它返回的很好,我尝试了清除缓存并重新启动、清理和重建,但它始终返回相同的结果


为什么不能正确推断类型?

它推断正确。您的代码向Kotlin建议LiveData可以生成两种不同类型的对象。你有这个:

emit(artistList)
这是:

emit(Resource.error("Error: ",e.message))
Kotlin可以从中推断出的最具体的常见类型是
资源
,因为它们都是资源对象,但具有不同的泛型类型


考虑发出一个包含两个子类的密封类,一个用于数据类型,另一个用于错误类型。

正如Doug所指出的,您可以将
资源
实现更改为这一类

sealed class Resource<out T> {
    class Loading<out T> : Resource<T>()
    data class Success<out T>(val data: T) : Resource<T>()
    data class Failure<out T>(val throwable: Throwable) : Resource<T>()
}
密封类资源{
类加载:资源()
数据类成功(val数据:T):资源()
数据类失败(val throwable:throwable):资源()
}

你能帮我处理一下密封类doug吗?谢谢这里有很多文档。我建议研究一下,如果你有什么特别的问题,再问一个新问题。
emit(artistList)
emit(Resource.error("Error: ",e.message))
sealed class Resource<out T> {
    class Loading<out T> : Resource<T>()
    data class Success<out T>(val data: T) : Resource<T>()
    data class Failure<out T>(val throwable: Throwable) : Resource<T>()
}