可以在 Java 中的覆盖方法中缩小返回类型。
但是否有可能在声明期间强制缩小范围?
例如,这在模式中可能很好,其中内部类与外部类同时子类化:
public class Try_ForceNarrow {
public interface IMember {
}
public interface Container<M extends IMember> {
M createMember();
}
public static class A implements Container<A.Member> {
@Override
public Member createMember() {
return new Member();
}
public class Member implements IMember {
}
}
public static class B extends A implements Container<B.Member> {
@Override
public Member createMember() {
return new Member();
}
public class Member extends A.Member {
}
}
public static void main(String[] args) {
}
}
此代码编译失败,并出现“接口容器不能使用不同的参数多次实现”的错误。
如何避免这种情况?
当然,我可以写
public static class B extends A {
@Override
public Member createMember() {
return new Member();
}
public class Member extends A.Member {
}
}
但是这样我就可以忘记覆盖createMember()
和违反模式。