Это <?>
зверь.Это часто приводит к путанице и ошибкам, потому что, когда вы сначала видите это, а затем начинаете верить, <?>
является подстановочным знаком для любого типа Java .Что .. не соответствует действительности.<?>
- это неизвестный тип , небольшая и неприятная разница.
Это не проблема, если вы используете его с Class
.Обе строки работают и компилируются:
Class anyType = String.class;
Class <?> theUnknownType = String.class;
Но - если мы начнем использовать его с коллекциями, то мы увидим странные ошибки времени компиляции:
List<?> list = new ArrayList<Object>(); // ArrayList<?> is not allowed
list.add("a String"); // doesn't compile ...
Наши List<?>
это не коллекция, которая подходит для любого типа объекта.Он может хранить только один тип: мистический «неизвестный тип».Конечно, это не настоящий тип.