Описание тега 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 эквивалентен неограниченному подстановочному знаку.

Смотрите также: