Нарушением было "Избегайте использования типов реализации, таких как 'ArrayList'; используйте вместо этого интерфейс".
Следующая строка исправит нарушение:
List<Object> list = newArrayList<Object>();
Почему последний с List следует использовать вместо ArrayList?
Переведено автоматически
Ответ 1
Использование интерфейсов поверх конкретных типов является ключом к хорошей инкапсуляции и свободному связыванию вашего кода.
Следовать этой практике даже при написании собственных API-интерфейсов - хорошая идея. Если вы это сделаете, позже вы обнаружите, что проще добавлять модульные тесты в свой код (используя методы макетирования) и изменять базовую реализацию, если потребуется в будущем.
Это предпочтительнее, потому что вы отделяете свой код от реализации списка. Использование интерфейса позволяет вам легко изменить реализацию, ArrayList в данном случае, на другую реализацию list, не изменяя ничего из остального кода, если в нем используются только методы, определенные в List .
Ответ 3
В целом я согласен, что отделение интерфейса от реализации - это хорошо, и это упростит обслуживание вашего кода.
Однако существуют исключения, которые вы должны учитывать. Доступ к объектам через интерфейсы добавляет дополнительный уровень косвенности, который замедлит ваш код.
Для интереса я провел эксперимент, который сгенерировал десять миллиардов последовательных обращений к списку массивов длиной 1 миллион. На моем MacBook с частотой 2,4 ГГц доступ к ArrayList через интерфейс списка занимал в среднем 2,10 секунды, при объявлении его типа ArrayList это занимало в среднем 1,67 секунды.
Если вы работаете с большими списками, глубоко внутри внутреннего цикла или часто вызываемой функции, то это стоит рассмотреть.
Ответ 4
ArrayList и LinkedList - это две реализации списка, который представляет собой упорядоченную коллекцию элементов. С точки зрения логики не имеет значения, используете ли вы ArrayList или LinkedList , поэтому вам не следует ограничивать этот тип.
This contrasts with say, Collection and List, which are different things (List implies sorting, Collection does not).