Kotlintypes推断faild

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

public abstract  Class bindViewModel(); 

当我在Kotlin中扩展BaseActivity时:

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

Kotlin提醒我返回是types推断expression式

 Type inference failed. Expected type mismatch: required:Class found:Class 

如何解决这个问题?

PS的ArchViewModel.class扩展BaseViewModel

types推断不失败。 你的方法签名表示它可以返回Class用于你要求的任何T (它扩展了BaseViewModel ),所以它可以被称为例如

 activity.bindViewModel() 

并且必须返回一个Class 。 由于ArchViewModel::class.java不是Class ,因此实现不正确。

无论是在Kotlin还是Java,实际上都是不可能实现的。 如果return ArchViewModel.class在Java中编译,那是因为您使用了原始typesBaseViewModel ,因此编译器放弃了types检查,并且不报告错误。

所以你需要修复这个方法,这样才能实现。 如何,取决于你真正想要从中得到什么。

或者,您可以通过将return ArchViewModel::class.java as Class进行“修复”。 编译器会正确地警告你这个转换是不安全的。