Я программирую на интерфейсах Я буду использовать это все время, особенно для коллекций - PullRequest
0 голосов
/ 10 октября 2018

Как предполагается, почти везде я буду использовать интерфейс все время, особенно при работе с коллекциями.

// Using interfaces
List<Integer> list = new LinkedList<Integer>();
((LinkedList) list).offerFirst(num);

//Using concrete class
LinkedList list = new LinkedList<Integer>();
list.offerFirst(num);

При первом подходе компилятор выдает предупреждение, и даже синтаксис кажется громоздким.

warning: [unchecked] unchecked call to offerFirst(E) as a member of the raw type LinkedList

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Обычно это лучше:

List<Integer> list = new LinkedList<>();
list.add(42);

Deque<Integer> list = new LinkedList<>();
list.offerFirst(num);

Хотя иногда выбора нет.

LinkedList<Integer> list = new LinkedList<>();
list.add(42);
list.offerFirst(num);

Интерфейсный подход дает более общий алгоритм со свободой реализации, повторной реализацией в будущем., большая применимость.

Однако это касается только обобщений.

0 голосов
/ 10 октября 2018

Если вы используете метод offerFirst, возможно, вам следует программировать для интерфейса Deque (который представляет двустороннюю очередь) вместо интерфейса List:

Deque<Integer> deque = new LinkedList<Integer>();
deque.offerFirst(num);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...