Трудно понять, что именно вы спрашиваете (или что вы пытаетесь сделать) ... но вы можете параметризовать без необработанных типов.
Class<? extends Object> cc4 = Class.class; // no raw types
Class<?> cc5 = Class.class; // also an option
Что касается вашего последнего примераЭто не имеет смысла, поскольку кажется, что вы хотите создать список массивов списков массивов, которые содержат ?
, но ваше объявление не объявляет список массивов списков массивов, которые содержат ?
.
Правильно написанное (но все еще не правильное Java) будет:
ArrayList<ArrayList<?>> lst = new ArrayList<ArrayList<Integer>>(); // Type mismatch
Что ожидается.Это не работает по той же причине, что-то вроде следующего не работает:
Object o = new Object();
Integer i = new Integer(3);
o = i;
i.floatValue();
o.floatValue(); // can't access that method, we need to specifically cast it to Integer
Типы Java не выводятся заранее (даже в цепочке наследования).
Если выВы можете оставить здесь подстановочный знак, пожалуйста:
ArrayList<ArrayList<?>> lst = new ArrayList<ArrayList<?>>(); // works!