我有两节课:
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中使用它呢?
答案 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>
不兼容。