Интерфейс SequecendCollection в Java не следует твердым принципамJAVA

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

Сообщение Anonymous »

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

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

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, хотя он реализует тот же интерфейс.
Это неудобно, потому что если у меня есть метод, который получает тип класса SequencedCollection в качестве параметра, мне нужно еще раз угадать в теле метода (т. е. экземпляр), является ли фактический объект, переданный в качестве параметра, тем самым я могу работать with.
Это еще один способ сказать, что некоторые дочерние элементы SequencedCollection нельзя использовать вместо родительского класса без неожиданного поведения...... что, в свою очередь, является еще одним способом сказать, что интерфейс SequencedCollection нарушает принцип Подстановки Лискова (L в SOLID).
Есть ли обоснованность этого наблюдения?

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

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

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

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

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

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