Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 17 Sealed class Basics @ JFN 2021

Java 17 Sealed class Basics @ JFN 2021

Das Konzept von verschlossenen Klassen ist kein neues. Mit ihnen soll die Erweiterung der Klassenhierarchie durch Externe unterbunden werden. Java kenn dafür seit vielen Jahren die final-classes. Was, aber wenn die Klasse nur für den Benutzter verschlossen sein?

Hier hilft die JEP-409 die mit Java 17 das Konzept der Sealed Classes einführt. Mit Sealed Classes bekommen Java Entwickler die volle Kontrolle über die Vererbungsmöglichkeiten ihres Codes.

Wie man dieses Features benutzt kann und wie sie mit anderen neuen Java Features wie Pattern Matching zusammen spielen möchte ich in dieser Session beleuchten.

Code Examples see: https://github.com/MBoegers/public-talks/tree/main/jfn2021-sealed_classes/examples

Avatar for Merlin Bögershausen

Merlin Bögershausen

September 16, 2021
Tweet

More Decks by Merlin Bögershausen

Other Decks in Programming

Transcript

  1. Java 17 Sealed Classes Basics Java Forum Nord 2021 –

    Merlin Bögershausen – PSI Software AG
  2. Weg der Sealed Classes in Java 2 Project Amber Post

    von Gavin Bierman und Brian Goetz Pattern Matching von Typen https://cr.openjdk.java.net/~brian goetz/amber/pattern-match.html JEP-360 Java 15 Preview 01.07.2019 Basiert auf ADT Basic Syntax Ermöglichen weiterer Pattern https://openjdk.java.net/jeps/360 JEP-397 Java 16 2. Preview 08.06.2020 Kontextabhängige Key Words Anonyme Class Type Cast https://openjdk.java.net/jeps/397 JEP-409 Java 17 Final 27.02.2021 Keine Änderungen Dauerhaftes Java Feature https://openjdk.java.net/jeps/409 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  3. Summary of JEP-409 JEP-409: Sealed Classes – Short Version 3

    Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them. 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  4. Ziele von JEP-409 JEP-409: Sealed Classes – die Ziele 4

    Goals Non-Goals Allow the author of a class or interface to control which code is responsible for implementing it Provide a more declarative way than access modifiers to restrict the use of a superclass Support future directions in pattern matching by providing a foundation for the exhaustive analysis of patterns It is not a goal to provide new forms of access control such as "friends“ It is not a goal to change final in any way 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  5. Let‘s Code! 22.09.2021 PSI Software AG | Vertraulichkeit: intern PSI

    & intern “Kunde, Partner, …” 5 Kontrolle über Vererbung Probleme handlebar Keine Aussagen über Erschöpfung
  6. JEP-409: Sealed Classes – Motivation zu Ziel 1 & 2

    6 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  7. Algebraische Datentypen: Summen- und Produkttypen Produkttypen • Instanzen: 1 ..

    N-Tupel von Werten • Unveränderlich • Abzählbar viele Instanzen • Records aus Projekt Amber JEP-395 https://en.wikipedia.org/wiki/Product_type 8 Summentyp • Auch: Tagged Union, Variant, disjoint Union … • Instanzen sind 1.. N Typen sein • Wichtig: nur definierte Typen • Basis für Sealed Classes aus Project Amber https://en.wikipedia.org/wiki/Tagged_union 3-Tupel aus Wobei Ergibt 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  8. Disjunkte Datentypen 9 • Disjunkt: Menge A und B haben

    keine gemeinsamen Elemente • Implizite Vererbung vernachlässigt • Ermöglicht effizientes Pattern Matching für Typen • Ermöglicht Compile-Time Errors A I B 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  9. Disjunkte Datentypen 10 • Disjunkt: Menge A und B haben

    keine gemeinsamen Elemente • Implizite Vererbung vernachlässigt • Ermöglicht effizientes Pattern Matching für Typen • Ermöglicht Compile-Time Errors A I B C ? 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  10. Let‘s Code! 22.09.2021 PSI Software AG | Vertraulichkeit: intern PSI

    & intern “Kunde, Partner, …” 11 JEP-409 in Action Für Klassen, Interfaces, Enums und Records
  11. JEP-409 Syntax und Semantik für Interfaces Java Forum Nord 2021

    – Java 17 Sealed Classes Basics – Merlin Bögershausen 12 16.09.2021
  12. JEP-409 Syntax und Semantik für Klassen Java Forum Nord 2021

    – Java 17 Sealed Classes Basics – Merlin Bögershausen 15 16.09.2021
  13. JEP-409 Syntax und Semantik für Enums Java Forum Nord 2021

    – Java 17 Sealed Classes Basics – Merlin Bögershausen 18 16.09.2021
  14. JEP-409 Syntax und Semantik für Records Java Forum Nord 2021

    – Java 17 Sealed Classes Basics – Merlin Bögershausen 21 16.09.2021
  15. JEP-409 Beschränkungen Java Forum Nord 2021 – Java 17 Sealed

    Classes Basics – Merlin Bögershausen 24 Sealed & Permits im selben Module oder Package Nur direktes erweitern möglich Sealed muss klar Propagiert werden FunctionalInterfaces können nicht sealed sein Anonyme Klassen können nicht sealed sein 16.09.2021
  16. Let‘s Code! 22.09.2021 PSI Software AG | Vertraulichkeit: intern PSI

    & intern “Kunde, Partner, …” 25 JEP-409 in Action JEP-409 und Pattern Matching Up-Casten Spaß mit Futures
  17. Anfangsbeispiel mit Sealed Calsses 26 16.09.2021 Java Forum Nord 2021

    – Java 17 Sealed Classes Basics – Merlin Bögershausen
  18. JEP-409 und Switch Expression 27 Mit JEP-409 wird JEP-406: Pattern

    Matching for switch erst ermöglicht. Auch mit Non-Sealed. 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  19. JEP-409 und Switch Expression – Pitfall 28 Default ist nötig

    da Instanzen von S möglich. Andere Lösung: S abstrakt machen. 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  20. JEP-409 und Switch Expression über mehrere Ebenen 22.09.2021 PSI Software

    AG | Vertraulichkeit: intern PSI & intern “Kunde, Partner, …” 29
  21. Das Böse Upcasten sicherer möglich 30 Durch JEP-409 und JEP-406

    wird sicheres Upcasten möglich. Zumindest für Methoden 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  22. Spaß mit Futures – Was in der Future API möglich

    wäre 31 Keine 4 Excpetions mehr verarbeiten. Direkt reagieren, verpacken in Exception ist noch immer möglich. Idee: Brain Goetz @ InfoQ 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  23. Bemerkung am Rande Keine Angst! Alle Beispiele die wir gleich

    sehen sind Teil des Folielensatz und werden mit zur Verfügung gestellt, als Source-Dateien. Auch die bereits gesehenen Listings ;-) 32 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  24. 33 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed

    Classes Basics – Merlin Bögershausen
  25. Referenzen/Further Reading JEPs  https://openjdk.java.net/jeps/409 JEP-409: Sealed Classes  https://openjdk.java.net/jeps/406

    JEP-406: Pattern Matching for switch (Preview)  https://openjdk.java.net/jeps/395 JEP-395: Records Intros  https://www.baeldung.com/java-sealed-classes-interfaces  https://docs.oracle.com/en/java/javase/15/language/sealed-classes-and-interfaces.html  https://xperti.io/blogs/sealed-classes-java-feature/  Viele kommen diese Woche ;-) Vertiefendes  https://cr.openjdk.java.net/~briangoetz/amber/pattern-match.html Bierman, Goetz: Pattern Matching for Java  https://docs.oracle.com/javase/specs/jls/se16/preview/specs/sealed-classes-jls.html Java Languaga Spec Changes Theoretisches  https://en.wikipedia.org/wiki/Algebraic_data_type Algebraische Datentypen  https://en.wikipedia.org/wiki/Product_type Produktdatentypen  https://en.wikipedia.org/wiki/Algebraic_data_type Summendatentypen 34 16.09.2021 Java Forum Nord 2021 – Java 17 Sealed Classes Basics – Merlin Bögershausen
  26. VIELEN DANK FÜR IHRE AUFMERKSAMKEIT! Java Forum Nord 2021 –

    Java 17 Sealed Classes Basics – Merlin Bögershausen @MBoegie mboegers merlin-boegershausen Direkter Kontakt [email protected] 16.09.2021