2014-01-27 2 views
0

В чем разница междуЗначение различных типов параметров в интерфейсе java.util.List Java

public List<?> myList;

и

public List<String> myList;

Я знаю, что последний будет хранить List из myList objects (Strings), но я не уверен, что первый делает. Думаю, он возьмет объект любого type. Но это безопасно? t

+2

Читайте на подстановочных знаков. –

+4

http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html –

ответ

1

Да, его небезопасным, поэтому вы не можете добавить к нему при использовании его в качестве параметра. Вы можете читать только это.

List<?> означает список, набранный неизвестным типом. Это может быть List<A>, a List<B>, a List<String> и т. Д.

Поскольку вы не знаете, к какому типу вводится список, вы можете читать только из коллекции, и вы можете рассматривать объекты только как объекты.

public void processElements(List<?> elements){ 
    for(Object o : elements){ 
     System.out.println(o); 
    } 
} 

В этом методе вы не можете добавлять вещи в «элементы». Только читайте вещи, потому что вы не можете знать, какой тип элементов.

1

Как вы уже сказали, второй будет содержать список строк. Сначала содержит список неизвестных объектов, и вам нужно будет использовать их для правильного отображения объектов перед их использованием. Были бы другие льготы с дикими картами, когда вы используете их с наследованием, например List<? extends ABC> и т. Д. Вам нужно пройти через раздел подстановок java-документов.

Вот простой учебник, чтобы понять их http://tutorials.jenkov.com/java-generics/wildcards.html

1

List<String> является Parameterized Type, представляющий собой список, который может содержать объекты типа String, только тогда

List<?> является Unbounded Wildcard Type, представляющий список, который может содержать только объекты неизвестного типа.

По Effective Java, как безопасно использовать для List из Raw Type, которые могут привести к исключениям во время выполнения и предоставляется только для совместимости и взаимодействия с унаследованным кодом, написанным до введения дженериков за исключением.

Смежные вопросы