Java 21 is GA!
Autor
Marcus HeldHi,
Java 21 hat seit Dienstag endlich den General Availability (GA) Status 🎉
Schon seit Monaten nutze ich jede Gelegenheit, um zu erzählen, dass virtuelle Threads mein Highlight dieses Releases ist. Zum Beispiel in diesem oder diesem alten Newsletter, oder hier in meinem Blog.
Und das hat sich auch nicht geändert. Ich glaube virtuelle Threads sind einer der bedeutesten Verbesserungen seit Jahren. Ob das auch alles so eintritt - wird sich zeigen.
Aber es gibt natürlich auch andere Features, die nicht unerwähnt bleiben sollen.
Collections werden mit neuen Methoden erweitert
Es wurde mit SequencedCollection
und SequencedMap
neue Interfaces eingeführt, die es einfacher machen auf das erste und letzte Element einer Collection zuzugreifen:
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
Und dann ist da noch das Record Pattern Matching
Seit Java 16 ist auch in Java endlich pattern matching vorhanden und wir brauchen nach einem instanceof
nicht mehr sinnlos casten. Mit Java 21 wird dieses Feature für Records noch erweitert. Dabei
können wir jetzt so was schreiben:
static void printSum(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println(x + y);
}
}
Und mit switch-cases können wir auch folgende Konstrukte basteln:
record Pair<T1, T2>(T1 first, T2 second) { }
public static void main(String[] args) {
Pair<String, Object> p = new Pair<>("foo", 42);
switch (p) {
case Pair(String a, String b) -> System.out.println("Two strings: " + a + b);
case Pair(String a, Integer b) -> System.out.println("String and Integer: " + a + b);
default -> throw new IllegalStateException("Unexpected value: " + p);
}
}
Aber bitte statt meines Beispiels, lieber mit Polimorphie und strictly typed classes arbeiten. Aber es ist immer gut Optionen zu haben.
Und weniger Boilerplate!
Der Generational ZGC verspricht bessere Performance
Vor allem kurzlebige Objekte können schneller abgeräumt werden. Damit werden die garbage collector runs effizienter - sowohl in Bezug auf CPU als auch auf Memory.
Nicer change - aber ich brenne nicht dafür 😉
Ansonsten gibt es noch einen Haufen neue Preview Features, wie die neue Möglichkeit die main
Methode ohne umliegende Klasse zu deklarieren. Die meisten habe ich mir aber noch nicht im Detail
angeschaut.
Die kommenden Konferenzen werden ganz im Fokus der neuen Features stehen und ich bin gespannt was da noch im Detail drinnen steckt. Das eine oder andere werde ich hier mit dir sicherlich teilen!
Rule the Backend,
~ Marcus