当我在项目中同时使用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
答案 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>
。编译器会正确地警告你这个演员表是不安全的。