Sequenzierte Collection -Schnittstelle in Java folgen keine festen PrinzipienJava

Java-Forum
Anonymous
 Sequenzierte Collection -Schnittstelle in Java folgen keine festen Prinzipien

Post by Anonymous »

In Java SE 21 gibt es eine Schnittstelle namens SequencedCollection.
Es gibt nur wenige integrierte Klassen, die diese Schnittstelle implementieren, einschließlich ArrayList und TreeSet< /code>.
Die Schnittstelle definiert einige Methoden, zum Beispiel addLast und viele andere, obwohl diese ausreichen wird.
Wenn ich einen ArrayList-Typ verwende, wird der Code dies tun kompiliert und wird korrekt ausgeführt:

Code: Select all

var myArray = new ArrayList(List.of("a", "b"));
myArray.addLast("c");
Wenn ich ein TreeSet verwende, wird dieser Code kompiliert, löst aber eine Laufzeitausnahme aus:

Code: Select all

var myTree = new TreeSet(List.of("a", "b"));
myTree.addLast("c");
Dies liegt daran, dass die Methode addLast für TreeSet nicht verfügbar ist, obwohl sie dieselbe Schnittstelle implementiert.
Das ist unpraktisch, denn wenn ich eine Methode habe, die einen SequencedCollection-Klassentyp als Parameter empfängt, muss ich im Methodenkörper (d. h. in der Instanz von) noch einmal erraten, ob das eigentliche als Parameter übergebene Objekt das Richtige ist Ich kann mit arbeiten.
Das ist eine andere Art auszudrücken, dass einige untergeordnete Elemente von SequencedCollection nicht ohne unerwartetes Verhalten anstelle der übergeordneten Klasse verwendet werden können.
Dies wiederum ist der Fall Anders ausgedrückt: Die SequencedCollection-Schnittstelle verstößt gegen das Liskov-Substitutionsprinzip (das L in SOLID).
Habe ich Verstehen Sie das Liskov-Substitutionsprinzip, indem Sie es anwenden dieses besondere Beispiel?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post