Java泛型可以帮助强制没有参数的方法返回扩展A并实现B的对象吗?
这是我目前拥有的:
public abstract class UI {
public abstract MainPage getMainPage();
public void refresh() {
MainPage mainPage = getMainPage();
if ( ! (mainPage instanceof AbstractLayout)) {
throw new ClassCastException("Please subclass AbstractLayout");
}
// do stuff with mainPage
}
}
public class MyUI extends UI {
@Override
public MainPage getMainPage() {
return new MyPage(); // wrong: does not subclass AbstractLayout
}
}
public class MyPage implements MainPage {}
public class AbstractLayout {}
public interface MainPage {}
我想擦除getMainPage()以某种方式强制其重写以返回AbstractLayout的实例。现在,我正在运行时进行检查,但是我想在编译时进行检查。能做到吗
最佳答案
是的,您可以使用泛型来强制getMainPage的返回类型扩展AbstractLayout并实现MainPage,而无需AbstractLayout实现MainPage。一种解决方案是使UI通用。
这将导致编译器错误:
public abstract class UI<T extends AbstractLayout & MainPage> {
public abstract T getMainPage();
}
public class MyUI extends UI<MyPage> { // Compiler error: Bound mismatch
@Override
public MyPage getMainPage() {
return new MyPage();
}
}
public class MyPage implements MainPage {}
public class AbstractLayout {}
public interface MainPage {}
使用MyPage扩展AbstractLayout将允许代码进行编译:
public class MyPage extends AbstractLayout implements MainPage {}
关于java - 没有参数的方法的多重继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21070048/