Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 9 Diamond Operator für anonyme innere Klassen – Typinferenz endlich erlaubt

Das Problem vor Java 9

Der Diamond Operator (<>) wurde in Java 7 eingeführt, um redundante Typangaben bei Generics zu vermeiden:

List<String> list = new ArrayList<>(); // OK in Java 7

Aber: Bei anonymen inneren Klassen war er verboten – der Compiler konnte den Typ nicht inferieren.

Java 9 Lösung

Ab Java 9 funktioniert <> auch bei anonymen Klassen, wenn der Typ aus dem Kontext inferierbar ist (Ziel-Typisierung).

Vergleich

Vor Java 9 (explizit)

Handler<Integer> h1 = new Handler<Integer>(1) { ... };
Handler<? extends Number> h2 = new Handler<Number>(2) { ... };
Handler<?> h3 = new Handler<Object>("test") { ... };

Ab Java 9 (mit Diamond)

Handler<Integer> h1 = new Handler<>(1) { ... };
Handler<? extends Number> h2 = new Handler<>(2) { ... };
Handler<?> h3 = new Handler<>("test") { ... };

Vollständiges Beispiel

public class DiamondDemo {
    public static void main(String[] args) {
        Handler<Integer> intHandler = new Handler<>(1) {
            @Override public void handle() { System.out.println(content); }
        };
        intHandler.handle();

        Handler<? extends Number> numHandler = new Handler<>(2) {
            @Override public void handle() { System.out.println(content); }
        };
        numHandler.handle();

        Handler<?> anyHandler = new Handler<>("Test") {
            @Override public void handle() { System.out.println(content); }
        };
        anyHandler.handle();
    }
}

abstract class Handler<T> {
    public T content;
    public Handler(T content) { this.content = content; }
    abstract void handle();
}

Ausgabe:

1
2
Test

Voraussetzungen für Typinferenz

Einschränkungen

Fazit

Ein konsequenter Schritt zur Vervollständigung der Typinferenz. Macht anonyme Klassen mit Generics lesbarer und konsistenter mit dem Rest der Sprache.

Java

  1. Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
  2. Java instanceof-Operator: Ein umfassender Leitfaden
  3. Java verschachtelte und innere Klassen meistern: Typen, Beispiele und Best Practices
  4. Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
  5. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  6. Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
  7. Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
  8. Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
  9. Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
  10. Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen