Интерфейс SequencedCollection в Java не соответствует принципам SOLIDJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Интерфейс SequencedCollection в Java не соответствует принципам SOLID

Сообщение Anonymous »

В Java SE 21 есть интерфейс SequencedCollection.
Существует несколько встроенных классов, реализующих этот интерфейс, включая ArrayList и TreeSet< /code>.
Интерфейс определяет некоторые методы, например addLast, среди многих других, хотя и этого будет достаточно.
Если я использую ArrayList type, код скомпилируется и будет работать правильно:

Код: Выделить всё

var myArray = new ArrayList(List.of("a", "b"));
myArray.addLast("c");
Если я использую Treeset , этот код будет компилироваться, но выбросит исключение времени выполнения:

Код: Выделить всё

var myTree = new TreeSet(List.of("a", "b"));
myTree.addLast("c");
Это потому, что метод Addlast недоступен для Treeset , даже если он реализует один и тот же интерфейс.
Это неудобно, потому что, если у меня есть метод, который получает последовательный тип класса как параметр, мне нужно второе место в корпусе метода (т.е. экземпляр ), является ли фактический объект, передаваемый как параметр, является одним из Я могу работать с.
Это, в свою очередь, является еще одним способом сказать, что интерфейс SececendCollection нарушает принцип замены liskov ( l в твердом).
Я понял принцип замены Лискова, применяя его в этом конкретном примере? < /p>

Подробнее здесь: https://stackoverflow.com/questions/793 ... principles
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»