Существует мало встроенных классов, которые реализуют этот интерфейс, включая ArrayList и reeset < /code>.
Интерфейс определяет некоторые методы, например, Addlast , среди многих других, хотя этого будет достаточно.
Если я использую тип ArrayList , код компилируется и будет работать правильно:
Код: Выделить всё
var myArray = new ArrayList(List.of("a", "b"));
myArray.addLast("c");
Код: Выделить всё
var myTree = new TreeSet(List.of("a", "b"));
myTree.addLast("c");
Это неудобно, потому что если у меня есть метод, который получает тип класса SequencedCollection в качестве параметра, мне нужно еще раз угадать в теле метода (т. е. экземпляр), является ли фактический объект, переданный в качестве параметра, тем самым я могу работать with.
Это еще один способ сказать, что некоторые дочерние элементы SequencedCollection нельзя использовать вместо родительского класса без неожиданного поведения...... что, в свою очередь, является еще одним способом сказать, что интерфейс SequencedCollection нарушает принцип Подстановки Лискова (L в SOLID).
Понял ли я Принцип замены Лискова, применив его в данном конкретном примере?
Подробнее здесь: https://stackoverflow.com/questions/793 ... principles
Мобильная версия