Я учусь на SCJP/OCPJP и наткнулся на образец вопроса, который показался мне странным.
Пример кода создал две универсальные коллекции:
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
«Правильный» ответ на вопрос заключался в том, что этот код будет компилироваться, но добавление в любую коллекцию вызовет ошибку времени выполнения.
Когда я пытаюсь скомпилировать такой код, я просто получаю ошибки. Учебник по Java даже не показывает этот тип кода, вместо этого он обычно использует подстановочные знаки как часть восходящего приведения.
Collection<?> c = new ArrayList<String>();
Являются ли две общие коллекции выше законным кодом? Второй по моей логике запретил бы только интерфейсы. Первый выглядит совершенно бесполезным. Зачем использовать дженерик, который не пытается контролировать?