Что значитзнак означает в ArrayList - PullRequest
2 голосов
/ 05 марта 2012

В ArrayList для Android, таком как simplelistadapter, я обычно вижу ArrayList<?>, а в некоторых рассмотренных мной уроках <?> заменяется некоторым значением. Но я все еще не совсем уверен, к какой переменной или квалификатору это относится.

Ответы [ 6 ]

4 голосов
/ 05 марта 2012

Это называется Generics .

Например, вы можете сделать это:

ArrayList<Integer> list = new ArrayList();
list.add(new Integer(1));
list.add(new Integer(2));
.....

Integer i = (Integer)list.get(1);

Или вы можете сделать:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
.....

Integer i = list.get(1);

Как видите, не нужно кастинг.

2 голосов
/ 05 марта 2012

Символ подстановки для универсального типа. Обычно вы объявляете список массивов следующим образом:

ArrayList<String>

Где тип указан точно. Список будет содержать строки. Но иногда вы хотите создать метод или класс, который принимает ArrayList любого типа, или вам нужно поле, которое указывает ArrayList любого типа

public void removeFirstItem(ArrayList<?> target) { 
...
}

Теперь этот метод может принять ArrayList<String> или ArrayList<Long> и т. Д. И выполнить с ним некоторую операцию.

Аналогично вы можете иметь локальную переменную:

ArrayList<?> someList;
someList = new ArrayList<String>();
someList = new ArrayList<Long>);

Это работает, тогда как:

ArrayList<String> someList = new ArrayList<String>();
someList = new ArrayList<Long>(); 

Не будет, поскольку someList указан как ArrayList<String>, поэтому ему может быть назначен только ArrayList<String>.

2 голосов
/ 05 марта 2012

Это означает, что ArrayList может содержать любой не примитивный тип.

0 голосов
/ 05 марта 2012

Это вопрос относительно дженериков.Синтаксис <(Kind of Object)> означает, что в качестве аргумента можно передать только определенный тип объекта (экземпляр класса)Когда у вас есть синтаксис, вы говорите, что любой тип экземпляра класса может быть передан.

0 голосов
/ 05 марта 2012

Синтаксис является "подстановочным знаком". Это необходимо с помощью дженериков Java:

Подстановочный знак может быть «ограниченным» или «неограниченным». Вся проблема универсальной типизации во время компиляции / разработки тесно связана с проблемой JVM во время выполнения «стирания типа»:

Надеюсь, это поможет .. pSM

0 голосов
/ 05 марта 2012

Аналогично ArrayList<? extends Object>, что означает, что он может содержать любой объект, наследуемый от Object класса (т. Е. Все объекты в Java).

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