Kotlin类型推断faild

时间:2017-12-22 05:20:30

标签: android kotlin

当我在项目中同时使用Kotlin和Java时 在Java BaseActivity.class中:

override fun <T : BaseViewModel<*, out IBaseView<*>>?> bindViewModel(): Class<T> {
    return ArchViewModel::class.java
}

当我在Kotlin中扩展BaseActivity时:

Type inference failed. Expected type mismatch:
required:Class<T>
found:Class<ArchViewModel>

Kotlin提醒我,返回是类型推断faild

<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>

如何解决此问题?

P.S。 ArchViewModel.class扩展了BaseViewModel

1 个答案:

答案 0 :(得分:-1)

类型推断不会失败。您的方法签名表示它可以为您要求的任何Class<T>(扩展T)返回BaseViewModel,因此可以调用它,例如如

activity.bindViewModel<SomeRandomModel>()

并且必须返回Class<SomeRandomModel>。由于ArchViewModel::class.java不是Class<SomeRandomModel>,因此实施不正确。

无论是在Kotlin还是在Java中,实际上都无法正确实现。如果return ArchViewModel.class在Java中编译,那是因为你使用原始类型BaseViewModel,所以编译器放弃了类型检查并且没有报告错误。

因此,您需要修复该方法,以便可以实施。怎么样,取决于你真正想要的东西。

或者,您可以修复&#34;它通过施放return ArchViewModel::class.java as Class<T>。编译器会正确地警告你这个演员表是不安全的。