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
进行“修复”。 编译器会正确地警告你这个转换是不安全的。
- Android工作室不解决在IDE中使用Kotlin(.kt)编写的类,但编译正常
- Kotlin的mapTo()会覆盖数组中的数据吗?
- Android(Kotlin) – CookieHandler不能使用POST方法,但使用GET工作
- 在Kotlin文件的主要方法中,android studio“error:can not find or load main class”
- Kotlin对象加载延迟
- Android studio 2.3:无法初始化类org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
- 将android hashmap转换为kotlin
- 使用Kotlin的“let”的合理情况
- NullPointerException在Kotlin中