Как получить элемент из списка <T>elements = new ArrayList <> () ;? - PullRequest
0 голосов
/ 17 июня 2019

Я хочу получить элементы из списка. Я сейчас работаю над проектом, рядом с именем класса: <T extends Comparable<T>> написано.

И у меня есть ArrayList List<T> list = new ArrayList<>();

Но как мне получить элемент из списка? Я пытался list.get(1);, но затем я получаю сообщение об ошибке: error: incompatible types: T cannot be converted to int

1 Ответ

2 голосов
/ 17 июня 2019

Вы не можете объявить

List<int> list = ...

, но вы можете безопасно объявить,

List<Integer> list = new ArrayList<>()

Integer класс соответствует требуемой подписи (он реализует Comparable<Integer>).

Поэтому, когда вы сделаете это, все будет в порядке

List<Integer> list = new ArrayList<>()
list.add(13) // autoboxing converts int to Integer
int value = list.get(0) // autoboxing converts Integer back to int

В качестве дополнительной заметки, пожалуйста, помните, что можно добавить null -s в этот список, поэтому с NPE будет взорвано следующее:

List<Integer> list = new ArrayList<>()
list.add(null) // null reference is okay
int value = list.get(0) // throws, we got null Integer reference,
                        // that cannot be converted to a primitive

Если вам когда-нибудь понадобится это сделать, вы можете сделать:

Integer value = list.get(0)
if (null != value) {
  int primitive = value // safe, because non-null
}
...