【问题标题】:Not enough information to infer type variable T没有足够的信息来推断类型变量 T
【发布时间】:2020-04-21 07:43:04
【问题描述】:

我今天已将我的 build.gradle 文件更新到最新版本
类路径 '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&lt;MyTClass&gt;(instance())
  • 它不起作用它说:构造函数 ListViewModelFactory(listRepository:ListRepository) 和 instance() 没有预期的类型参数,它现在说 Property getter or setter expected.
  • 也发布您的 ViewModel 类。
  • 这里是:class ListViewModel( private val listRepository: ListRepository ) : ViewModel() { val list : Deferred&lt;LiveData&lt;out List&lt;ListItemEntity&gt;&gt;&gt; by lazyDeferred { listRepository.getList() } fun upsertItem(item: ListItemEntity) { listRepository.upsertItem(item) } fun deleteItem(item: ListItemEntity) { listRepository.deleteItem(item) } } 感谢@BelalKhan 的回复,希望对您有所帮助

标签: android kotlin build.gradle


【解决方案1】:

你能试试吗
private val viewModelFactory by instance&lt;ListViewModelFactory&gt;()

【讨论】:

    【解决方案2】:

    试试这个:替换

     private val factory : AuthViewModelFactory by instance()
    

      private val factory by instance<AuthViewModelFactory>()
    

    【讨论】:

      【解决方案3】:

      为避免此问题,请在 IDE 的“Preferences | Kotlin Compiler”中禁用新类型推断。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 2021-02-23
        • 1970-01-01
        • 2021-02-11
        • 2017-12-29
        • 1970-01-01
        相关资源
        最近更新 更多