为什么我在将 MutableLiveData 转换为 LiveData 时得到 "useless cast"?
Why do i get "useless cast" when casting MutableLiveData to LiveData?
我有一系列反馈渠道,因为(在问题范围之外)在我的 ViewModel
.
现在,我不想将我的 MutableLiveData
暴露在 Viewmodel
之外。
因此,我创建了一个包含 LiveData
个对象的私有列表,但编译器抱怨“无用的转换”
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels
get() = _feedbackChannels.map{
@Suppress("USELESS_CAST") // it is not useless as it no longer exposes the mutableLiveData
it as LiveData<*>
}
为什么我会收到 USELESS_CAST
警告?
编译器没有意识到您这样做只是为了强制暗示 属性 类型。
只需明确指定类型,您就可以完全放弃强制转换。您甚至不必使用地图,一个简单的 toList()
即可:
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels : List<LiveData<FeedbackEvent>>
get() = _feedbackChannels.toList()
显然编译器不理解转换的意义。为了以更明确的方式执行此操作并删除昂贵的 map
函数,您可以像这样向上转换它:
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels: Array<out LiveData<FeedbackEvent>>
get() = _feedbackChannels
编辑
如果您想专门公开一个 List
(避免公开可变数组),那么您应该首先创建一个:
private val _feedbackChannels = List(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels: List<out LiveData<FeedbackEvent>>
get() = _feedbackChannels
我有一系列反馈渠道,因为(在问题范围之外)在我的 ViewModel
.
现在,我不想将我的 MutableLiveData
暴露在 Viewmodel
之外。
因此,我创建了一个包含 LiveData
个对象的私有列表,但编译器抱怨“无用的转换”
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels
get() = _feedbackChannels.map{
@Suppress("USELESS_CAST") // it is not useless as it no longer exposes the mutableLiveData
it as LiveData<*>
}
为什么我会收到 USELESS_CAST
警告?
编译器没有意识到您这样做只是为了强制暗示 属性 类型。
只需明确指定类型,您就可以完全放弃强制转换。您甚至不必使用地图,一个简单的 toList()
即可:
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels : List<LiveData<FeedbackEvent>>
get() = _feedbackChannels.toList()
显然编译器不理解转换的意义。为了以更明确的方式执行此操作并删除昂贵的 map
函数,您可以像这样向上转换它:
private val _feedbackChannels = Array(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels: Array<out LiveData<FeedbackEvent>>
get() = _feedbackChannels
编辑
如果您想专门公开一个 List
(避免公开可变数组),那么您应该首先创建一个:
private val _feedbackChannels = List(10) { MutableLiveData<FeedbackEvent>() }
val feedbackChannels: List<out LiveData<FeedbackEvent>>
get() = _feedbackChannels