Posts mit dem Label 7 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label 7 werden angezeigt. Alle Posts anzeigen

15.07.2011

Java 7 - Generics - Endlich weniger Tipparbeit...

Mit der Einführung von Java 7 wird gleichzeitig die Initialisierung von generischen Typen aktualisiert. In Java 6 ist es zwingend notwendig, dass generalisierte Typen redundant deklariert werden mussten.


Dies ist mit Java 7 endlich nicht mehr notwendig. Mit der Einführung des sogenannten Diamond-Operators (< >) kann ab sofort auf eine redundante Deklaration verzichtet und damit deutlich übersichtlicher Code erstellt werden!



Zwar haben die meisten IDEs die Arbeit der redundanten Deklaration für den Nutzer abgenommen, aber die Lesbarkeit des Codes wurde dadurch nicht unbedingt besser.

Definitiv ein Schritt in die richtige Richtung, wenngleich fürs erste auch gewöhnungsbedürftig!

08.07.2011

Java 7 - Vereinfachtes Exceptionhandling

Eine weitere Neuerung in Java 7 ist das vereinfachte Exceptionhandling. In Java 6 musste jede Exception in einem eigenen Block abgefangen und behandelt werden. Dies wurde dann bei Methoden mit zahlreichen Exceptions schnell unübersichtlich und aufwändig.

Um das ganze etwas verständlicher zu machen, habe ich ein kleines Beispiel gebaut. Das Beispiel zeigt eine Bar in der man Getränkte bestellen kann. Sollte ein Getränk nicht mehr vorhanden sein, wird eine Exception geworfen. Ebenfalls wird eine Exception geworfen, wenn ein Barkeeper gerade nicht anwesend sein sollte. Das Ende der Simulation ist erreicht, wenn die Bar geschlossen ist, was wiederum durch eine Exception vermittelt wird. Der vollständige Quellcode kann im Repository zum Blog eingesehen werden.
Klassen der Simulation

Mit dem Erstellen der Bar wird ein zufälliger Vorrat an Drinks erstellt, die im Laufe der Simulation zur Verfügung stehen.
Initialisierung der Bar

Die Bar nimmt die Bestellungen an und prüft intern die Verfügbarkeit der entsprechenden Drinks. Sollten Fehler auftreten, werden diese an den Nutzer weitergegeben.
Aufnahme einer Bestellung

Diese Ausgangssituation ist sowohl für das Java 6 als auch für das Java 7 Beispiel identisch. Die eigentliche Unterscheidung findet sich in der Simulationklasse der Bar.

Mit Java 6 ist es notwendig, dass alle Exceptions einzeln abgefangen werden.
Simulation mit Java 6
Damit ergeben sich mitunter redundante Blöcke, die vermieden werden könnten, siehe Behandlung der DrinkNotAvailableException und der MissingBarkeeperException.

Mit Java 7 können verschiedene Exceptions zu einem Block zusammengefasst und dann gemeinsam behandelt werden.
Simulation mit Java 7

Sicherlich ein Feature, welches gerade für die Sammlung verschiedener Systemfehler und deren Behandlung im UI sehr nützlich ist.

Java 7 - Switch/Case Statements jetzt auch mit String-Werten

Eine wesentliche Neuerung in kommenden Java Version ist die Möglichkeit direkt auf der Basis von Strings zu verzweigen. In der aktuellen Version ist eine Nutzung von Strings nur mit einem Umweg möglich, da dies nur auf primitiven Daten und ihren Wrapper-Objekten möglich war.

Eine Lösung ist die Nutzung des HashCodes des entsprechenden Strings zur Ermittlung des Einstiegspunktes. Ebenfalls denkbar ist die Nutzung einer Map in der die Strings den Schlüssel bilden und die Werte für die Auswertung des Switch/Case genutzt werden. Beide Lösungen entsprechen nicht dem, was ich selber in einer produktiven Umgebung einsetzen und für gut befinden würde. Daher hat sich für mich die einzige Lösung in der Nutzung von Enums herauskristallisiert.


Mit der neuen Java Version ist es nun möglich direkt mit Strings zu arbeiten. Damit kann nun anhand eines Strings in die Case-Anweisungen gesprungen werden.

 
Ob dies nun Einzug in die reale Programmierung halten sollte und ob ein Vergleich von Strings eine sinnvolle Sache für die Nutzung des Switch/Case ist, das sei nun jedem selbst überlassen. Da mir persönlich das Konzept der Enums deutlich besser gefällt, werde ich diesem wohl treu bleiben.

Für die Einrichtung eines Eclipse mit dem Support des aktuellen Java 7 Release Kandidaten empfehle ich die Informationen aus dem Eclipse Wiki als Dokumentation. Die aktuelle Version von Eclipse unterstützt den JAva 7 RC noch nicht von Haus aus und muss dementsprechend erst konfiguriert werden.