Java Generics: список, список <Object>, список <?> - PullRequest
70 голосов
/ 29 января 2009

Может кто-нибудь объяснить как можно подробнее, различия между следующими типами?

List
List<Object>
List<?>

Позвольте мне сделать это более конкретным. Когда бы я хотел использовать

// 1 
public void CanYouGiveMeAnAnswer(List l) { }

// 2
public void CanYouGiveMeAnAnswer(List<Object> l) { }

// 3
public void CanYouGiveMeAnAnswer(List<?> l) { }

Ответы [ 12 ]

0 голосов
/ 29 января 2009

Когда я хочу использовать

public void CanYouGiveMeAnAnswer( List l ){}

Когда вы не можете выполнять все заклинания самостоятельно.

Когда я хочу использовать

public void CanYouGiveMeAnAnswer( List l<Object> ){}

Когда вы хотите ограничить тип списка. Например, это будет неверный аргумент.

 new ArrayList<String>();

Когда я хочу использовать

public void CanYouGiveMeAnAnswer( List l<?> ){}

В основном никогда.

0 голосов
/ 29 января 2009

В дополнение к учебникам, упомянутым Робом, вот викибук, объясняющий тему:
http://en.wikibooks.org/wiki/Java_Programming/Generics


Edit:

  1. Нет ограничений по типу элементов в списке

  2. Элементы в списке должны расширяться Объект

  3. Подстановочный знак используется сам по себе, поэтому он соответствует чему угодно

Было бы наивно с моей стороны заключать в этот момент, что практически нет разницы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...