Я пытался использовать некоторые Generics и заметил это.поведение дженериков Java для ограниченных подстановочных знаков
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, и все же я могу иметь подстановочную декларацию, которая не проходит до А. Конечно, я не могу создать его экземпляр в
Z<? extends A> z5 = new Z<A>(); //Not allowed
, но не должно это были ошибки компиляции? Почему это разрешено?
EDIT: исправлен экземпляр Z5