Beim Durchsuchen des Java Collections Framework ist mir aufgefallen, dass einige der Schnittstellen den Kommentar enthalten (optional operation)
. Diese Methoden ermöglichen das Implementieren von Klassen über eine, UnsupportedOperationException
wenn sie diese Methode einfach nicht implementieren möchten.
Ein Beispiel hierfür ist die addAll
Methode in der Set Interface
.
Nun, wie in dieser Reihe von Fragen dargelegt, sind Schnittstellen ein bestimmender Vertrag für das, was die Nutzung erwarten kann.
Schnittstellen sind wichtig, weil sie unterscheiden, was eine Klasse tut und wie sie es tut. Der Vertrag, der festlegt, was ein Kunde erwarten kann, lässt dem Entwickler die Möglichkeit, ihn nach Belieben umzusetzen, solange er den Vertrag einhält.
und
Eine Schnittstelle ist eine Beschreibung der Aktionen, die ein Objekt ausführen kann. Wenn Sie beispielsweise einen Lichtschalter betätigen, leuchtet das Licht, und es ist Ihnen egal, wie. In der objektorientierten Programmierung ist eine Schnittstelle eine Beschreibung aller Funktionen, die ein Objekt haben muss, um ein "X" zu sein.
und
Ich denke, der schnittstellenbasierte Ansatz ist bedeutend besser. Sie können dann Ihre Abhängigkeiten gut verspotten, und alles ist im Grunde genommen weniger eng miteinander verbunden.
Was ist der Sinn einer Schnittstelle?
Interface + Extension (Mixin) vs Basisklasse
Angesichts der Tatsache, dass der Zweck von Schnittstellen darin besteht, einen Vertrag zu definieren und Ihre Abhängigkeiten lose miteinander zu verknüpfen, wird UnsupportedOperationException
der Zweck nicht durch einige Methoden zunichte gemacht ? Es bedeutet, dass ich nicht mehr weitergegeben werden kann Set
und nur noch benutze addAll
. Vielmehr muss ich wissen, welche Implementierung von Set
mir bestanden wurde, damit ich wissen kann, ob ich verwenden kann addAll
oder nicht. Das erscheint mir ziemlich wertlos.
Worum geht es also UnsupportedOperationException
? Gleicht es nur den alten Code aus und sie müssen ihre Schnittstellen bereinigen? Oder hat es einen sinnlicheren Zweck, den ich vermisse?
src.zip
funktioniert sie hervorragend. Es ist hilfreich, genau zu wissen, welchen Code die JRE manchmal ausführt, und sich nicht auf JavaDoc zu beschränken, was etwas ausführlich sein kann.
addAll
inHashSet
. Es verschiebt sich zu der Standardimplementierung, inAbstractCollection
der ganz sicher nicht geworfen wirdUnsupportedOperationException
.