Java 15 Features – Überblick

Hier ist ein schneller Überblick über die Funktionen, die Teil von Java 15 sind:

  • Sealed Classes (Vorschau) – JEP 360
  • Pattern Matching für instanceof (Zweite Vorschau) – JEP 375
  • Records (Zweite Vorschau) – JEP 359
  • Text Blocks (Standard) – JEP 378
  • Hidden Classes – JEP 371
  • Entfernen der Nashorn JavaScript Engine – JEP 372
  • Reimplementierung der Legacy DatagramSocket API – JEP 373
  • Deaktivierung und Abschaffung von Biased Locking – JEP 374
  • Shenandoah: Ein Garbage Collector mit geringen Pausenzeiten – JEP 379
  • Entfernung der Solaris und SPARC Ports – JEP 381
  • Foreign-Memory Access API (Zweites Inkubator) – JEP 383
  • Abschaffung der RMI-Aktivierung zur Entfernung – JEP 385

Java 15 Installationseinrichtung auf Mac OS

Um mit Java 15 zu beginnen, laden Sie das JDK von hier herunter. Kopieren und extrahieren Sie die tar-Datei in /Library/Java/JavaVirtualMachines wie unten gezeigt:

$ cd /Library/Java/JavaVirtualMachines
$ sudo cp ~/Downloads/openjdk-15_osx-x64_bin.tar.gz /Library/Java/JavaVirtualMachines
$ sudo tar xzf openjdk-15_osx-x64_bin.tar.gz
$ sudo rm openjdk-15_osx-x64_bin.tar.gz

Nachdem das erledigt ist, öffnen Sie die bash_profile mit einem beliebigen Texteditor. Ich verwende vim ~/.bash_profile. Setzen Sie den Pfad von Java15 auf JAVA_HOME, speichern Sie die Änderungen und führen Sie ein source ~/.bash_profile aus, um die Änderungen zu übernehmen.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

Schließlich sind Sie bereit, Programme mit Java 15 zu kompilieren und auszuführen. Wir verwenden JShell, ein interaktives REPL-Command-Line-Tool, um schnell die neuen Java 15 Features zu testen.

Es ist wichtig zu beachten, dass viele in Java 15 veröffentlichte Features in der Vorschau sind. Das bedeutet, dass sie zwar derzeit voll funktionsfähig sind, aber in Zukunft möglicherweise modifiziert werden. Einige könnten standardisiert oder einfach in den nächsten Release-Zyklen entfernt werden. Um Vorschau-Features zu testen, müssen Sie –enable-preview explizit setzen, wenn Sie JShell oder Java-Programm ausführen, wie unten gezeigt:

jshell --enable-preview
javac --release 15 --enable-preview Author.java

Wesentliche Sprachänderungen in Java 15

1. Sealed Classes (Vorschau)

Sealed Classes gibt es schon eine Weile in Kotlin und Java 15 führt dieses Feature nun ein, um die Kontrolle über die Vererbung zu verbessern. Wie der Name schon sagt, ermöglichen Sealed Classes, Klassenhierarchien nur auf bestimmte Typen zu beschränken oder zu erlauben. Dies ist unglaublich nützlich für Pattern Matching, da Sie eine spezifische Anzahl von Klassen zum Wechseln haben.

Die folgende Syntax definiert eine sealed class in Java 15:

public sealed class Vehicle permits Car, Bike, Truck {
...
}

So bedeutet der obige Code, dass nur die Klassen, die nach dem Schlüsselwort permits definiert sind, die sealed class Vehicle erweitern dürfen. Falls Sie die Klassen Car, Bike und Truck in derselben Datei wie Vehicle definiert haben, können Sie das Schlüsselwort permits weglassen und der Compiler wird sich darum implizit kümmern, wie unten gezeigt:

sealed class Vehicle {...}
final class Car extends Vehicle {...}
final class Bike extends Vehicle {...}
final class Truck extends Vehicle {...}

Wie Sie oben sehen können, haben wir den final-Modifikator für jede der Klassen definiert. Das ist eine wichtige Regel für sealed classes, die Sie beachten müssen: Jede erlaubte Klasse muss mit einem expliziten Modifikator gesetzt werden. Sie kann entweder final, sealed oder non-sealed sein. Hier ist, wie jeder der Modifikatoren die Vererbung beeinflusst:

  • Eine erlaubte Unterklasse, die als final deklariert ist, kann nicht weiter erweitert werden.
  • Eine erlaubte Unterklasse, die als sealed deklariert ist, kann weiter erweitert werden, aber nur von Klassen, die von der Unterklasse erlaubt sind.
  • Eine erlaubte Unterklasse kann als non-sealed deklariert werden und weiter von jeder Klasse erweitert werden. Die Oberklasse kann die Unterklasse nicht weiter in dieser Klassenhierarchie einschränken.

Vor Java 15 konnten Entwickler nur das Schlüsselwort final oder Scope-Modifier verwenden, um die Vererbung zu kontrollieren. Also bringen sealed classes zusätzliche Flexibilität für Java-Entwickler bei der Definition von Klassenhierarchien.

Die Reflection API von Java erhält auch zwei neue Methoden für den Umgang mit sealed classes:

java.lang.constant.ClassDesc[] getPermittedSubclasses();
boolean isSealed()

2. Records (Zweite Vorschau)

Records wurden als Vorschau-Feature in Java 14 eingeführt, um Boilerplate-Code beim Schreiben von POJO-basierten Daten-Trägerklassen zu reduzieren. Das gibt es schon lange in Kotlin in Form von data classes.

Jetzt, mit Java 15, erhalten Records ihre zweite Vorschau. Während es keine großen Änderungen gibt (nur einige kleine Zusätze), gibt es doch einige wichtige Klärungen und Einschränkungen, die Sie kennen sollten:

  • Vor Java 15 konnte man native Methoden in Records deklarieren (obwohl es keine gute Idee war). Jetzt verbietet das JEP ausdrücklich die Deklaration von nativen Methoden in Records. Verständlicherweise nimmt das Definieren einer nativen Methode den USP von Records weg, indem es eine externe Zustandsabhängigkeit einführt.
  • Die implizit deklarierten Felder, die den Record-Komponenten einer Record-Klasse entsprechen, sind final und sollten jetzt nicht mehr über Reflection modifiziert werden, da dies IllegalAccessException auslösen wird.

Records sind dazu gedacht, Daten-Trägerklassen zu sein, und Sie sollten es vermeiden, native Methoden darin zu definieren.

Schlussfolgerung

Während die oben genannten zwei die wichtigsten Sprachfeatures in Java 15 waren, haben wir auch Pattern Matching in der zweiten Vorschau für Benutzerfeedback, Text Blocks nun als Standardfeature und vor allem ein neues Hidden classes-Feature.

Hidden classes sind ein JVM-Feature, das für Framework-Entwickler relevant ist. Es ermöglicht, dass Klassenimplementierungen durch die Definition mit Lookup::defineHiddenClass nicht auffindbar gemacht werden. Dadurch können solche Klassen weder mit Class.forName gefunden noch im Bytecode referenziert werden.

Dies sind die wichtigsten Änderungen, die in Java 15 eingeführt wurden.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: