我正在尝试一些泛型并注意到这个问题。
class D extends C {}
class C extends B {}
class B extends A {}
class A {}
class Z<E extends B> {}
class temp {
public static void main(String[] args) {
Z z1 = new Z();
Z<B> z2 = new Z<B>();
Z<C> z3 = new Z<C>();
Z<D> z4 = new Z<D>();
Z<A> z5 = new Z<A>(); //compile error - E can be subsituted only until B
Z<? extends A> z5 = null; //no compile error
}
}
为什么这个不会抛出编译错误?
Z<? extends A> z5 = null;
类Z的上限是B,但我可以使用通配符声明来扩展到A。当然,我不能将其实例化为
Z<? extends A> z5 = new Z<A>(); //Not allowed
但这不应该是编译错误吗?为什么它允许这种声明?
编辑:已更正z5的实例化。