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
进行“修复”。 编译器会正确地警告你这个转换是不安全的。
- 如何在Kotlin的片段中设置微调器中的addapter?
- 内联setter或不在Kotlin中创建未使用的setter?
- kotlin是function性的还是程序性的?
- @Name注释exception
- Firebase请求从未在Android上完成
- Android中的Kotlin协程:为什么要使用Anko中的bg()而不是async()?
- 我现在正在用Kotlin开发一个Android应用程序,但是发生了一个错误:CompilationException:无法将方法调用“readText”内联到
- Android Studio:“执行失败的任务”:app:mergeDebugResources’“
- 在Android工作室Kotlin