java - 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 中使用呢?
解决方案
请注意,在 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>
不兼容。
推荐阅读
- python - 当一个句子和一个词被传递时,Python函数将一个词从一个句子变为大写
- python - '_csv.writer' 对象不可迭代。如何追加到csv文件
- terraform - 资源定义语法中的 Terraform 列表令人头疼
- swift - Cocoaasyncsocket 问题,GCDAsyncSocket 连接问题
- python - Python将变量分配给MYSQL查询的正确方法?
- c# - 设置中的 FilePath 定位器?
- powershell - 哈希表中的解释点
- django - 错误:这些包与需求文件中的哈希不匹配。更新 Django 时
- javascript - 使用 JSON 函数读取/解析数据的正确方法
- scala - 在 Quarkus Scala 中注入属性作为选项