【发布时间】:2021-12-27 16:24:47
【问题描述】:
我在理解泛型时遇到问题,但在这里找不到答案。
问题来了:
我有一个抽象类,它被认为是少数视图模型的父类。想法是,将根据来自不同视图模型的数据创建一个视图。 我想用同样的方法画出来,只是使用不同的类型。
另外,我不想要返回类型,我想触发一些回调。
这是摘要:
package foo.bar.ui.app.user_profile.view_model
abstract class UserDefaultsGenericViewModel : BaseViewModel() {
abstract fun <P> getData(
data: (P) -> Unit,
error: (Result.Error) -> Unit
)
}
然后一个 ViewModel 的例子是这样的:
package foo.bar.ui.app.user_profile.view_model
@HiltViewModel
class StopViewModel @Inject constructor(
private val getStopsByRouteUseCase: ParamsUseCase<RouteParams, Stops>
) : UserDefaultsGenericViewModel() {
var stopId = ""
override fun <Stops> getData(data: (Stops) -> Unit, error: (Result.Error) -> Unit) {
viewModelScope.launch {
when (val resultStops = getStopsByRouteUseCase.invoke(RouteParams(stopId, Direction.ToWork))) {
is Result.Success -> {
data.invoke(resultStops.value)
}
is Result.Error -> Log.e("TAG", "bar")
}
}
}
}
问题出在这一行: data.invoke(resultStops.value)
我得到:
类型不匹配:推断类型为 foo.bar.onboarding.Stops 但 Stops#1(foo.bar.ui.app.user_profile.view_model.StopViewModel.getData 的类型参数)是预期的
我做错了什么?
【问题讨论】: