Этот <?>
является зверем. Это часто приводит к путанице и ошибкам, потому что, когда вы видите это сначала, вы начинаете верить, <?>
является подстановочным знаком для любого типа 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<?>
не является которая подходит для любого типа объектов. Он может хранить только один тип: мистический «unkown type». Конечно, это не настоящий тип.