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

时间:2019-12-03 14:12:18

标签: java android kotlin

我有两节课:

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

2 个答案:

答案 0 :(得分:1)

是的,@ khelwood是正确的,应该是:

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

然后我可以使用:

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

谢谢。

答案 1 :(得分:1)

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

abstract fun selectViewModel(): Class<out BaseViewModel>

其中Class<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>不兼容。