【发布时间】:2018-06-02 17:31:36
【问题描述】:
我正在尝试编写一个通用的基础活动,它指定它的 ViewModel 类型是一个通用参数:
abstract class BaseActivity<T : ViewModel> : AppCompatActivity()
现在我正在尝试为我的 ViewModel 编写一个惰性初始化属性:
val viewModel by lazy { ViewModelProviders.of(this, getFactory()).get(T) }
显示的错误是Type Parameter T is not an expression
同样使用::class 或::class.java 也无济于事。谁能解释一下这个问题?
编辑:我尝试使用这样的具体内联函数:
inline fun <reified T : ViewModel?> AppCompatActivity.obtainViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProviders.of(this, factory).get(T::class.java)
}
并像这样使用它:
abstract class BaseActivity<T> : AppCompatActivity() {
val viewModel by lazy { obtainViewModel<T>(getFactory())
}
现在我得到错误,T 不能用作具体参数。
EDIT2: 迄今为止最好的解决方案似乎是:Link,但是在每个扩展类中实现抽象标记的开销。
【问题讨论】:
-
你能解释得更详细一点吗? @芒果