首页 > 解决方案 > Kotlin“as”的Java同义词是什么?

问题描述

我有两节课:

BaseViewModel extends ViewModel

NetworkViewModel extends BaseViewModel

在 Kotlin 中,我可以使用这种方法:

override fun selectViewModel(): Class<BaseViewModel> {
    return NetworkViewModel::class.java as Class<BaseViewModel>
}

但是在Java中我不能这样做(不兼容的类型):

@Override
public Class<BaseViewModel> selectViewModel() {
    return NetworkViewModel.class;
}

在 Kotlin 中我可以使用“as”,但如何在 Java 中使用呢?

标签: javaandroidkotlin

解决方案


请注意,在 Kotlin 中你也不应该as在这里使用;你的超类应该声明

abstract fun selectViewModel(): Class<out BaseViewModel>

whereClass<out BaseViewModel>相当于 Java Class<? extends BaseViewModel>,然后

override fun selectViewModel() = NetworkViewModel::class.java

将工作。

如果您确实需要强制转换,则相当于x as SomeType(SomeType) x; 但在这种情况下,您可能需要双重演员

return (Class<BaseViewModel>) (Class<?>) NetworkViewModel.class;

因为Java编译器注意到Class<NetworkViewModel>并且Class<BaseViewModel>不兼容。


推荐阅读