| Unmodifiable-Pattern |
Seite 1 von 4 Das Unmodifiable-PatternHintergrund:Java bietet zwar auch unmodifiable Listen an, aber leider ist die Lösung sehr tückisch. Sie besteht darin, die Implementierung der Schreibungoperation so zu überschreiben, dass beim Aufruf eine Exception ausgelöst wird. Somit wirken die Schreiboperationen wie Fallen bzw. Stolpersteine, über die der Programmierer stolpern kann. Eine denkbare ungüstige Lösung. Beispiel für eine tückische Situation:
Erklärung zum Code:Dieses einfache Programm erzeugt ein leeres ArrayList-Objekt für Strings mit dem Namen "strings". Danach lässt es sich von der Klasse Collections eine unveränderbare Liste erzeugen. Die zurückgegebene Liste implementiert genau wie die veränderbare Version das Interface List. Folglich bietet es auch die Operation add(String element) an. Allerdings ist bei der erzeugten, unveränderbaren Liste die Implementierung nur ausgetauscht worden: statt einen String der Liste hinzuzufügen wirft sie nun eine Exception vom Typ java.lang.UnsupportedOperationException. Somit wird bei Ausführung des Programms diese Exception auch geworfen. Ausgabe des Programms:Exception in thread "main" java.lang.UnsupportedOperationException Was ist das Problem dieser "Lösung"?Das hässliche an dieser Lösung ist, dass "etwas angeboten wird, was nicht geliefert werden kann" bzw. dass "Operationen angeboten werden, die keine sinnvolle Implementierung aufweisen". Das Angebot, diese Methode aufrufen zu können ohne zu wissen, dass sie Runtime-Exceptions werfen, stellt eine Falle oder einen Stolperstein für Programmierer dar. Vorallem, wenn Listen mehrfach herumgereicht werden (wenn auch nur als Kopie jeweils), steigt die Gefahr, dass der Programmierer vergisst oder übersieht, dass er eine unveränderbare Liste zu ändern versucht. Was ist die Ursache des Problems dieser "Lösung"?Die Ursache des Problems ist, dass zwischen Lese- und Schreiboperationen nicht unterschieden wird, d.h. statt in zwei Interfaces aufgeteilt zu werden werden die Operationen in einem Interface gemischt. |
||||||||
| Zuletzt aktualisiert am Samstag, 11. Juni 2011 um 16:57 Uhr |

