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/