繁体   English   中英

Kotlin“as”的 Java 同义词是什么?

[英]What is Java synonym for Kotlin "as"?

我有两个班级:

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 中使用呢?

是的,@khelwood 是对的,应该是:

public abstract Class<? extends BaseViewModel> getViewModelClass();

然后我可以使用:

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

谢谢你。

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

abstract fun selectViewModel(): Class<out BaseViewModel>

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

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

将工作。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM