有界通配符的Java泛型行为
我尝试了一些泛型,注意到了这一点有界通配符的Java泛型行为,java,generics,Java,Generics,我尝试了一些泛型,注意到了这一点 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&
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
}
}
类D扩展了C{}
类C扩展了B{}
类B扩展了{}
A类{}
类Z{}
班级临时工{
公共静态void main(字符串[]args){
Z z1=新的Z();
Z z2=新的Z();
Z z3=新的Z();
Z z4=新的Z();
Z z5=new Z();//编译错误-E只能替换到B
Z我认为看待您所问问题的一种方式是,Java是否允许您编写
Z<?> z;
Z;
更一般地说,Java应该允许任何泛型类型与无界通配符一起使用吗?如果你认为答案是“是”,我也这么认为,那么你已经得到了答案
Z<? extends A> z5 = new Z<A>(); //Not allowed
Z<?> z;