Описание тега unbounded-wildcard
Неограниченный подстановочный знак - это аргумент типа "?", Функция универсальных шаблонов в языке Java. Этот аргумент типа представляет некоторый "неизвестный" тип, который когда-то присутствовал.
Неограниченный подстановочный знак - это аргумент типа ?
, особенность дженериков на языке java. Этот аргумент типа представляет некоторый "неизвестный" тип, который когда-то присутствовал.
Подстановочный знак полезен в качестве аргумента типа в ситуации, когда знание точного типа не требуется:
public static void printElements(Iterable<?> anyIterable) {
for (Object element : anyIterable) {
System.out.println( element );
}
}
Тип, параметризованный подстановочным знаком, накладывает ограничения на использование объекта:
List<String> listOfString =
new LinkedList<>( Arrays.asList("a String") );
// We can assign any List to a List<?>, but, in
// doing so, we lose information about its original
// type argument.
List<?> listOfUnknown = listOfString;
// The wildcard therefore causes methods that once
// returned String to now return Object.
Object unknown0 = listOfUnknown.get( 0 );
// Compiler error:
// The wildcard prevents us from passing arguments
// to any method that once accepted String.
listOfUnknown.add( new Object() );
// Compiler error:
// Since we have lost knowledge of the original
// type, we can not pass String to the List either.
// (This is the case, even though we, as the programmer,
// can see this would be safe to do.)
listOfUnknown.add( "another String" );
Ограниченная маска_ввода_источника ? extends Object
эквивалентен неограниченному подстановочному знаку.
Смотрите также:
- Аргументы типа параметризованных типов в спецификации языка Java
- Официальный учебник по шаблонам