无法推断类型变量 T,信息不足。

5
我今天更新了我的build.gradle文件到最新版本,classpath 'com.android.tools.build:gradle:3.6.3'和最新的ext.kotlin_version = '1.3.72',但是我遇到了标题上的错误:instance()。
private val viewModelFactory: ListViewModelFactory by instance()

这是我的工厂类:

class ListViewModelFactory(
    private val listRepository: ListRepository
) : ViewModelProvider.NewInstanceFactory() {

    @Suppress("UNCHECKED_CAST")
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return ListViewModel(listRepository) as T
    }
}

有人能解释一下为什么会出现这个错误,并告诉我怎么去除它吗?谢谢!

附言:如果有帮助的话,我使用 Kodein,这是我的绑定:

bind() from provider { ListViewModelFactory(instance()) }

ListViewModelFactory 仍然是一个带有未指定 T 参数的模板,因为它继承自 ViewModelProvider.NewInstanceFactory。尝试使用 ListViewModelFactory<MyTClass>(instance()) - Benoit Guina
它不起作用,它说:构造函数ListViewModelFactory(listRepository:ListRepository)不需要类型参数,而通过instance(),它现在说需要属性getter或setter。 - CasGab
请同时发布您的ViewModel类。 - Belal Khan
这是代码内容:class ListViewModel( private val listRepository: ListRepository ) : ViewModel() { val list : Deferred<LiveData<out List<ListItemEntity>>> by lazyDeferred { listRepository.getList() } fun upsertItem(item: ListItemEntity) { listRepository.upsertItem(item) } fun deleteItem(item: ListItemEntity) { listRepository.deleteItem(item) } } 感谢 @BelalKhan 的回复,希望这能有所帮助。 - CasGab
3个回答

11

你可以尝试使用以下代码:

private val viewModelFactory = instance<ListViewModelFactory>()

1
尝试一下:替换


 private val factory : AuthViewModelFactory by instance()

  private val factory by instance<AuthViewModelFactory>()

-1
为避免问题,请在IDE中的“首选项| Kotlin编译器”中禁用新类型推断。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接