Видел что именно так надо объявлять и так правильней.
List<String> list = new LinkedList<>();
Но когда через объект вызываю метод: addFirst(), то идея сама подставляет вот такую конструкцию:
((LinkedList<String>) list).addFirst();
Почему я просто не могу сделать list.addFirst() подскажите пожалуйста!
Заметил что работает только если объявить вот так:
LinkedList<String> list = new LinkedList<>();
Но как я уже показывал выше правильней использовать вот такую конструкцию:
List<String> list = new LinkedList<>();
Поправьте если ошибаюсь
TL;DR;
Deque<String> list = new LinkedList<>();
Нужно использовать родителя самого высокого уровня, функциональности которого достаточно для решения задачи. Особенно это важно при создании библиотеки.
Т.е. вы думаете "а что мне вообще нужно от этого объекта", исходя из этого уже и принимаете решение. Например Map<K,V> при использовании почти всегда всё равно HashMap TreeMap или иное. Поэтому пишем Map.
В данном примере из класса LinkedList используется метод addFirst который был получен из интерфейса Deque. Если вы хотите использовать именно его (не add(int index, E element)) то пишите Deque если для вас критичен произвольный доступ (по фрагменту кода это непонятно), то пишите LinkedList
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости