Swing (genauer gesagt die Java Foundation Classes) ist zwar hinreichend mächtig, hat sich aber in den vergangenen Jahren fast gar nicht weiterentwickelt; moderne GUI-Komponenten, erweiterte Medienunterstützung und Animationen fehlen weitgehend. Anstatt die betagten JFC weiter auszubauen, entschied sich Sun/Oracle für …
In den späten 1990er-Jahren entstand mit dem Standard Widget Toolkit (SWT) ein weiterer Ansatz für Java-Oberflächen. IBM startete die Entwicklung 1998, als das Unternehmen eine neue IDE als Nachfolger von VisualAge for Java plante – aus diesem Projekt ging später die Eclipse-Plattform hervor. Ursprung und Architektur …
In größeren Java-Programmen sammeln sich naturgemäß zahlreiche Import-Deklarationen an. Zwar lassen sich diese in modernen Entwicklungsumgebungen bequem einklappen, doch sie bleiben Teil des Quellcodes und können schnell unübersichtlich werden. Java bietet einige Möglichkeiten, die Imports zu vereinfachen. Eine Option …
Mit Java 21 wurden unbenannten Variablen (engl. unnamed variables) eingeführt. Statt einer Variable einen Namen zu geben, kann ein Unterstrich (_) verwendet werden. Folgende lokale Variablendeklaration ist erlaubt: Dies signalisiert dem Leser und Compiler, dass diese Variable im folgenden Code nicht verwendet wird. …
Seit Java 21 ist die Möglichkeit vom switch stark erweitert worden. Das betrifft auch Aufzählungstypen. Es war immer ein wenig umständlich, wenn ein switch Konstanten von verschiedenen Aufzählungstypen vergleichen sollte. Das ist einfacher geworden und dazu ein kleines Beispiel. Nehmen wir zwei enum an, die keine …
Seit Java 21 gibt es in der Klasse Math neue Methoden, die einen Wert in einem Bereich halten: static double clamp(double value, double min, double man) static float clamp(float value, float min, float max) static int clamp(long value, int min, int man) static long clamp(long value, long min, long max) Die Methoden …
Obwohl Records keine Klassen erweitern können, können sie Schnittstellen implementieren. Dies ermöglicht uns, Abstraktionen zu erstellen, was nützlich ist, um gemeinsame Record-Komponenten zu teilen. Betrachten wir ein Beispiel. Wir wollen den Basistyp Event nicht mehr als abstrakte Oberklasse deklarieren, sondern als …
Führen wir für die folgenden Beispiele ein Record für Punkte ein: Nun möchten wir überprüfen, ob die X-Y-Koordinaten eines Punktes auf null stehen. Dafür erstellen wir eine Methode namens isZeroPoint(…), die alle Objekttypen akzeptiert und false zurückgibt, wenn es sich nicht um einen Punkt handelt: Eine kompaktere …
Wir haben bereits gesehen, dass der instanceof-Operator genutzt werden kann, um einen einzelnen Typ zu prüfen. Nun können wir diese Fallunterscheidung erweitern, um mehrere Typen zu testen. Nehmen wir an, dass die Zustände von Nap, Workout und Event im XML-Format gespeichert werden sollen. In diesem Kontext kann eine …