Java 10 – Die 12 Java Enhancement Prospals: Teil 1 JEP 286 das Schlüsselwort "var"

Java 10 – Die 12 Java Enhancement Prospals: Teil 1 JEP 286 das Schlüsselwort "var"

Nach den neuen Release Regeln von Java, (diese könnt ihr im Beitrag “Die neue Java-Politik – Wird Java jetzt unabhängiger?” nachlesen) wird Java 10 am 20.03.2018 verfügbar sein. Das sind genau 6 Monate nach dem Release von Java 9. Dafür sind 12 Java Enahancement Proposals – Verbesserungen – vorgesehen.

Wir präsentieren euch hier eine 12teilige Serie, in der wir euch jede Verbesserung erklären. Die erste ist die JEP 286:

JEP 286: Locale-Variable Type Inference

Java ist eine starktypisierte Programmiersprache. Dies hat den Vorteil, dass Typenfehler bereits beim Vorgang des Kompilierens entdeckt werden. Ein Nachteil ist, dass man dadurch viel Code erstellt. Dies fällt besonders beim Erstellen von lokalen Varibalen auf. Wird ein Objekt instanziiert, muss bei der Instanziierung auf der linken Seite als Referenz der Datentyp  des Objekts übergeben werden. Auf der rechtenseite wird dann der Objerkttyp übergeben. Bei beiden muss dabei auf die Regeln der Polymorphie geachtet werden:

meinObjekt o = new MeinObjekt();

Muss man viele Objekte erstellen, wie beispielsweise bei einer aufwendigen GUI (Graphical User Interface) in JavaFX, kann die Variableneklaration und Objektinitialisierung sehr mühselig und aufwendig sein. In anderen Type-safe Sprachen, wie C++ oder C#,  kann der Referenztyp einer Variablen bei der Definition abegleitet werden. So verwendet C++ das Schlüsselwort auto und C# das Schlüsselwort var. Java fehlt diese Art der Objekterstellung. Deshalb schlägt das Java Enhancement Proposal 286 das kontextsensitive Schlüsselwort var vor, das die Initialisierung einer Variablen wie folgt ermöglicht:

var o = new MeinObjekt();
var list = new ArrayList<MeinObjekt>();

Dabei ist das Schlüsselwort var kontextsensitiv, für das folgendes gilt:

Code, der var als Variablen-, Methoden- oder Packagebezeichner verwendet wird kompiliert. Wird var als Bezeichner für Klassen oder Interfaces funktioniert der Code nicht.

Locale-Variable Type Inference wird bei lokalen Variablen mit Initialisierungen, in der enhanced for-, sowie in Verbindung mit normalen for-Schleifen möglich sein. Nicht unterstützt werden Methodenparameter, Konstruktorparameter, Rückgabetypen von Methoden, Felder, catch und alle sonstigen Arten der Variablendeklaration.

Trotz der Einschränkungen hilft dies den Code abwechslungsreicher zu gestalten und die Codebasis der JDK zu vereinfachen. Mehr dazu findet ihr im Beitrag  JEP 286: Local-Variable Type Inference der offiziellen Seite der OpenJDK.

Hier geht es zum 2. Teil der Serie: Java 10 – Die 12 Java Enhancement Prospals: Teil 2 JEP 296 Aufräumarbeiten Im JDK-Wald

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.