2016-01-02 4 views
-2
List<List<Integer>> l = new LinkedList<LinkedList<Integer>>(); 
List<List<Integer>> l2 = new List<LinkedList<Integer>>(); 
List<List<Integer>> l3 = new LinkedList<List<Integer>(); 
List<List<Integer>> l4 = new LinkedList<>(); 

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

+0

По той же причине, что вы не можете выполнить 'LinkedList list = new LinkedList ();'. –

+2

Второй не работает, потому что 'List' - это интерфейс. Вы не можете создать «новый» интерфейс без реализации. –

+2

Я бы рекомендовал вариант 4 «Список <Список > l4 = новый LinkedList <>();' –

ответ

3

Первая декларация не работает, поскольку LinkedList<LinkedList<Integer>> не является List<List<Integer>>. Например, по декларации вы можете добавить ArrayList<Integer> в List<List<Integer>> (список списков целых чисел). Однако ArrayList<Integer> не может быть добавлен в LinkedList<LinkedList<Integer>> (связанный список связанных списков целых чисел).

Вторая инициализация, начиная с new List, не может работать, поскольку List - это интерфейс, а не класс, поэтому он не может быть инициализирован оператором new.

+2

@ cricket_007 Это пример [анонимного класса] (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) (и не интерфейс). –

+0

Хорошее объяснение. – sevenxuguang

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