Почему этот код действителен
ArrayList<?>[] arr = new ArrayList<?>[2];
а следующие два нет?
ArrayList<? extends Object>[] arr = new ArrayList<? extends Object>[2];
ArrayList<? super Object>[] arr = new ArrayList<? super Object>[2];
Две последние строки генерируют ошибку компиляции;
ошибка: создание универсального массива.
Пожалуйста, поясните разницу.
Обновить
С другой стороны, ArrayList<?>[] arr = new ArrayList<?>[2];
компилируется хорошо, но
ArrayList<?> arr = new ArrayList<?>();
нет.