SlideShare ist ein Scribd-Unternehmen logo
Was geht mit Java 17?
Jens Seekamp
GEDOPLAN GmbH, Expertenkreis Java, 20.01.2022
Local-Variable Type Inference
Variablendefinition auch ohne Typzuordnung möglich
2
var a = new ArrayList<String>();
Typ-Herleitung automatisch durch Compiler
weniger Schreibaufwand
bessere Lesbarkeit
nur für lokale Variablen
nur bei Wertzuweisng
weniger Polymorphie (vgl. List<String> = ...)
switch ohne Fallstricke
kein Stress mehr mit "fall through" und break
3
var mwstKennzeichen = "reduziert";
var nettoBetrag = 35.00;
var bruttoBetrag = 0.00;
switch (mwstKennzeichen) {
case "voll" -> bruttoBetrag = nettoBetrag * 1.19;
case "reduziert" -> bruttoBetrag = nettoBetrag * 1.07;
case "ohne" -> bruttoBetrag = nettoBetrag;
default ->
System.out.println("unbekanntes Mehrwertsteuer-Kennzeichen");
};
Switch Expressions
switch als Ausdruck, der einen Wert liefert
4
var code = 0;
String orderState = switch (code) {
case 0, 1 -> "booked";
case 2 -> "confirmed";
case 3 -> { String result = "canceled";
if (...) { result = "another state" }
yield result;
}
default: yield "undefined";
};
Text Blocks
mehrzeilige Textkonstanten als Textblöcke
Hurra, jetzt ist JDBC endlich gut - oder nur "schön"?
5
String sql = """
SELECT ID, FORENAME, SURNAME FROM PERSON
WHERE COUNTRY = 'D'
ORDER BY SURNAME, FORENAME
""";
Text Blocks
nützlich im Test-Umfeld für Testdaten
6
String person = """
{
id: 4711,
forename: "Maxime",
surname: "Musterfrau",
birthday: "1963-10-17",
country: "D"
}
""";
Algebraische Datentypen und Pattern Matching
7
Records
Sealed Classes
instanceof
switch
Enumeration
Array
Was sind algebraische Datentypen?
8
algebraische
Struktur
(ℝ, +,×)
(𝒯,⊕,⊗)
y = 2 × x 3,25
+
Double
Integer
Produkttyp ⊗
Summentyp ⊕
String
Produkttyp und Summentyp - formal
9
Produkttyp P bildet kartesisches Produkt
von Datentypen T1,...,Tn
P = T1  ...  Tn
S = T1  ...  Tn
Summentyp S bildet disjunkte Vereingung
von Datentypen T1,...,Tn
fange ich in Java doch nix mit an
funktionale Programmiersprachen z. B. Haskell
Produkttypen - Beispiele
10
vgl. java.time.LocalDate und java.time.Month
Datum:
Date = Integer  Month  Integer
vgl. java.awt.Point
Koordinatenpunkt:
Point = Double  Double
vgl. java.util.List<E>
Liste von ganzen Zahlen:
List<Integer> = Integer  ...  Integer
homogen
Summentypen - Beispiele
11
geometrische Figur:
Shape = Circle  Rectangle  Polygon mit
Circle = Point  Double
Rectangle = Point  Point
Polygon = Point  ...  Point
Aufzählungstypen sind Spezialfälle:
java.time.DayOfWeek = MONDAY  ...  SUNDAY
java.lang.Boolean = TRUE  FALSE
Rekursiver Summentyp z. B.
BinaryTree
Summen- und Produkttypen in Java
Summentypen werden in Java als versiegelte (sealed) Typen
dargestellt
Produkttypen werden in Java als Records dargestellt
Fachliches Beispiel
Domäne "Online-Shop"
Teilschritt "Bezahlen der Bestellung"
Modellierung verschiedener Zahlungsarten
12
Verarbeiten der Zahlung für eine Bestellung
13
Kategorisierung der möglichen Zahlungsarten
14
Versiegelte Typen
Ziel ist Steuerung der Vererbungs-Hierarchie
allgemeine Nutzbarkeit
eingeschränkte Ableitbarkeit
Schlüsselwörter
sealed  versiegelter Typ
permits  Liste der zulässigen Untertypen
non-sealed  nicht-versiegelter Typ
15
Versiegeln einer Schnittstelle
Schnittstelle OrderPayment soll nur 3 modellierte Unterklassen
haben können
16
public sealed interface OrderPayment
permits FirstDeliverThenPay,
FirstPayThenDeliver,
CreditCard { ...
mögliche Zahlungsarten
Verfeinerung der Zahlungskategorie
FirstDeliverThenPay in 2 Unterarten
17
final non-sealed
sealed
Versiegeln einer Klasse
versiegelte Oberklasse
18
zulässige Unterklassen
public final class PurchaseOnInvoice
extends FirstDeliverThenPay { ...
public non-sealed class PaymentUponCollection
extends FirstDeliverThenPay { ...
public abstract sealed class FirstDeliverThenPay
implements OrderPayment
permits PurchaseOnInvoice,
PaymentUponCollection { ...
mögliche Zahlungsarten
Verfeinerung der Zahlungskategorie FirstPayThenDeliver
19
sealed
final final final
Bewertung versiegelter Typen
genauere Modellierung der Domäne
Abstraktion nach wie vor möglich
weniger defensive Programmierung möglich
nicht zulässige neue Unterklassen liefern einen Compiler-
Fehler
nicht mehr so flexible Vererbung möglich
20
Records
Record ist Klasse mit folgenden Eigenschaften
(implizit) finale Klasse
Instanzen sind unveränderbar (immutable)
21
public record Person(String forename, String surname) {}
Records verfügen (implizit) über
parametrisierten Konstruktor
Accessor-Methoden für lesenden Zugriff auf die Attribute
Person person = new Person("Silke", "Musterfrau");
String forename = person.forename();
Einbetten von Bankdaten in Zahlungsarten
einige Zahlungsarten benötigen Daten einer Bankverbindung
22
Record für Daten der Bankverbindung
Verfeinerung der Zahlungsart "Kreditkarte"
Produkttyp kann als Variante in Summentyp verwendet werden
23
sealed
final
Records mit variabler Komponenten-Anzahl
letzter Komponenten-Typ kann T... sein
24
record NamedTuple(String name, Double... values) { }
new NamedTuple("Vektor_1", 0.5);
new NamedTuple("Vektor_2", 1.5, 4.234, 8.63);
Bewertung Records
einfache Implementierung von Daten-Objekten
kein Boiler-Plate-Code
unveränderbare Objekte (vgl. DDD Value Object)
neue Art von Klassen (vgl. zukünftige Entwicklung "primitive
objects")
25
Pattern Matching (Mustervergleich)
Pattern Matching ist ein symbolverarbeitendes
Verfahren, welches anhand eines vorgegebenen
Musters Teile einer diskreten Struktur identifiziert
dabei beschreibt ein Suchmuster mittels Meta-
Symbolen eine Menge von diskreten Teilstrukturen
26
kenn' ich von Java nicht
Pattern Matching zur Datenverarbeitung - Beispiel
Textersetzung in Zeichenketten
diskrete Struktur (java.lang.String)
Otto Mustermann
Suchmuster als regulärer Ausdruck (Pattern)
t{2}
musterbasierte Transformation (Textersetzung)
replaceAll("t{2}", "nn")
 Onno Mustermann
27
Pattern Matching zur Definition von Funktionen -
Beispiel
Fibonacci-Folge
mathematische Definition als Fallunterscheidung
Programm-Code in Haskell mit Pattern Matching
28
fib :: (Integral n) => n -> n
fib 0 = 0
fib 1 = 1
fib n = fib(n-1) + fib(n-2)
Java
42
Systematik des Pattern Matching
Pattern Matching für algebraische Datentypen
für Summentyp
Type Pattern
für instanceof
für switch
Enum (spezieller Summentyp)
für switch
für Produkttyp
Record Pattern
Array Pattern (homogener Produkttyp)
29
Type Pattern für instanceof
ermöglicht Wegfall von Type Castings
30
FirstDeliverThenPay payment = ...;
if (payment instanceof PurchaseOnInvoice poi) {
return poi.fooOnInvoice();
}
else if (payment instanceof PaymentUponCollection puc) {
return puc.fooOnCollect();
}
else {
throw new RuntimeException("unknown type of OrderPayment");
}
Type Pattern mit Guarded Pattern
boolesche Bedingung zur weiteren Einschränkung
31
public boolean isNullOrEmpty(Object object) {
return object == null
|| object instanceof String s && s.isBlank()
|| object instanceof Collection c && c.isEmpty();
}
Type Pattern für switch
default-Zweig noch erforderlich
32
public boolean isNullOrEmpty(Object object) {
return switch(object) {
case null -> true;
case String s && s.isBlank() -> true;
case Collection c && c.isEmpty() -> true;
default -> false;
};
}
Type Pattern für switch
kein default-Zweig notwendig bei versiegelten Typen
Compiler prüft Vollständigkeit
33
FirstDeliverThenPay payment = ...;
switch (payment) {
case PurchaseOnInvoice poi -> poi.fooOnInvoice();
case PaymentUponCollection puc -> puc.fooOnCollect();
}
Record Pattern
Record Pattern dient zur Dekonstruktion von Record-Objekten
34
if (object instanceof Person(String f, String s)) {
String name = f + " " + s;
...
Java
18
Array Pattern
Array Pattern dient zur Dekonstruktion von Array-Objekten
35
if (object instanceof String[] {var name1, var name2, ...}) {
System.out.println(name1 + name2);
...
Java
18
Bewertung Pattern Matching
einfachere Implementierung von Objekt-Dekonstruktion
mehr deklarativer Programmier-Stil
Compiler-Unterstützung bei fehlenden / neuen Alternativen
Vermeidung NPE
Pattern können kombiniert / geschachtelt werden
neuer "Happen" für Java als (auch) funktionale
Programmiersprache
36
Vector API
API zur Abbildung
Vektor-Berechnungen im Java-Programm
Vektor-Instruktionen im Befehlssatz des Prozessors
37
23 43 2 4562 -45 0 67 -321
8 lanes scalar (int)
Vector<Integer>  IntVector
Skalare Instruktion vs. Vektor-Instruktion
Multiplikation von ganzen Zahlen mit 3
Quelle: https://en.wikipedia.org/wiki/SIMD
38
Single Instruction Single Data (SISD)
8 Additionen von jeweils 2 Zahlen  8 Instruktions-Zyklen
39
23 43 2 4562 -45 0 67 -321
1 2 3 4 4 3 2 1
24 45 5 4566 -41 3 69 -320
+
=
+ + + + + + +
= = = = = = =
Single Instruction Multiple Data (SIMD)
Vektor-Operation parallel "lanewise"  1 Instruktions-Zyklus
analog: Reduktion als eine Vektor-Operation parallel "cross-lane"
40
23 43 2 4562 -45 0 67 -321
1 2 3 4 4 3 2 1
24 45 5 4566 -41 3 69 -320
+
=
Vector API - wozu?
41
Angewandte Mathematik (Numerik, Finanzwesen, ...)
Verarbeitung von Bild-, Ton- und Videodaten
Kryptographie
Machine Learning
interne JDK-Optimierung
Incubato
r
Vielen Dank!
Schulungen zum Thema: www.gedoplan-it-training.de
Projekt-Beratung und -Unterstützung: www.gedoplan-it-
consulting.de
42

Weitere ähnliche Inhalte

Was ist angesagt?

T2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschritteneT2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschrittene
dominion
 
JdbcTemplate aus Spring
JdbcTemplate aus SpringJdbcTemplate aus Spring
JdbcTemplate aus Spring
tutego
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
msebel
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
Digicomp Academy AG
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Java
tutego
 
Ruby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: ClosuresRuby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: Closures
Dirk Breuer
 
Do while
Do whileDo while
Do while
Fabian Hitziger
 

Was ist angesagt? (7)

T2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschritteneT2 s4 javascriptfuerfortgeschrittene
T2 s4 javascriptfuerfortgeschrittene
 
JdbcTemplate aus Spring
JdbcTemplate aus SpringJdbcTemplate aus Spring
JdbcTemplate aus Spring
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Java
 
Ruby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: ClosuresRuby is Magic - Episode #7: Closures
Ruby is Magic - Episode #7: Closures
 
Do while
Do whileDo while
Do while
 

Kürzlich hochgeladen

dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
DNUG e.V.
 
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdfdachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
DNUG e.V.
 
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdfdachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
DNUG e.V.
 
dachnug51 - Sametime 12 Deployment .pdf
dachnug51 - Sametime 12 Deployment  .pdfdachnug51 - Sametime 12 Deployment  .pdf
dachnug51 - Sametime 12 Deployment .pdf
DNUG e.V.
 
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
DNUG e.V.
 
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
VCAT Consulting GmbH
 

Kürzlich hochgeladen (6)

dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
dachnug51 - Keynote Airbus Defence and Space - Service Management and Collabo...
 
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdfdachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
dachnug51 - NIS2_DORA - Was steckt konkret dahinter.pdf
 
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdfdachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
dachnug51 - HCL Volt MX Go Services in Domino Apps.pdf
 
dachnug51 - Sametime 12 Deployment .pdf
dachnug51 - Sametime 12 Deployment  .pdfdachnug51 - Sametime 12 Deployment  .pdf
dachnug51 - Sametime 12 Deployment .pdf
 
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
dachnug51 - Keynote A1 Austria AG - HCL Domino alias Business Notes verbindet...
 
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
Headless WordPress beim WordPress Meetup Potsdam im Mai 2024
 

Was geht mit Java 17?

  • 1. Was geht mit Java 17? Jens Seekamp GEDOPLAN GmbH, Expertenkreis Java, 20.01.2022
  • 2. Local-Variable Type Inference Variablendefinition auch ohne Typzuordnung möglich 2 var a = new ArrayList<String>(); Typ-Herleitung automatisch durch Compiler weniger Schreibaufwand bessere Lesbarkeit nur für lokale Variablen nur bei Wertzuweisng weniger Polymorphie (vgl. List<String> = ...)
  • 3. switch ohne Fallstricke kein Stress mehr mit "fall through" und break 3 var mwstKennzeichen = "reduziert"; var nettoBetrag = 35.00; var bruttoBetrag = 0.00; switch (mwstKennzeichen) { case "voll" -> bruttoBetrag = nettoBetrag * 1.19; case "reduziert" -> bruttoBetrag = nettoBetrag * 1.07; case "ohne" -> bruttoBetrag = nettoBetrag; default -> System.out.println("unbekanntes Mehrwertsteuer-Kennzeichen"); };
  • 4. Switch Expressions switch als Ausdruck, der einen Wert liefert 4 var code = 0; String orderState = switch (code) { case 0, 1 -> "booked"; case 2 -> "confirmed"; case 3 -> { String result = "canceled"; if (...) { result = "another state" } yield result; } default: yield "undefined"; };
  • 5. Text Blocks mehrzeilige Textkonstanten als Textblöcke Hurra, jetzt ist JDBC endlich gut - oder nur "schön"? 5 String sql = """ SELECT ID, FORENAME, SURNAME FROM PERSON WHERE COUNTRY = 'D' ORDER BY SURNAME, FORENAME """;
  • 6. Text Blocks nützlich im Test-Umfeld für Testdaten 6 String person = """ { id: 4711, forename: "Maxime", surname: "Musterfrau", birthday: "1963-10-17", country: "D" } """;
  • 7. Algebraische Datentypen und Pattern Matching 7 Records Sealed Classes instanceof switch Enumeration Array
  • 8. Was sind algebraische Datentypen? 8 algebraische Struktur (ℝ, +,×) (𝒯,⊕,⊗) y = 2 × x 3,25 + Double Integer Produkttyp ⊗ Summentyp ⊕ String
  • 9. Produkttyp und Summentyp - formal 9 Produkttyp P bildet kartesisches Produkt von Datentypen T1,...,Tn P = T1  ...  Tn S = T1  ...  Tn Summentyp S bildet disjunkte Vereingung von Datentypen T1,...,Tn fange ich in Java doch nix mit an funktionale Programmiersprachen z. B. Haskell
  • 10. Produkttypen - Beispiele 10 vgl. java.time.LocalDate und java.time.Month Datum: Date = Integer  Month  Integer vgl. java.awt.Point Koordinatenpunkt: Point = Double  Double vgl. java.util.List<E> Liste von ganzen Zahlen: List<Integer> = Integer  ...  Integer homogen
  • 11. Summentypen - Beispiele 11 geometrische Figur: Shape = Circle  Rectangle  Polygon mit Circle = Point  Double Rectangle = Point  Point Polygon = Point  ...  Point Aufzählungstypen sind Spezialfälle: java.time.DayOfWeek = MONDAY  ...  SUNDAY java.lang.Boolean = TRUE  FALSE Rekursiver Summentyp z. B. BinaryTree
  • 12. Summen- und Produkttypen in Java Summentypen werden in Java als versiegelte (sealed) Typen dargestellt Produkttypen werden in Java als Records dargestellt Fachliches Beispiel Domäne "Online-Shop" Teilschritt "Bezahlen der Bestellung" Modellierung verschiedener Zahlungsarten 12
  • 13. Verarbeiten der Zahlung für eine Bestellung 13
  • 14. Kategorisierung der möglichen Zahlungsarten 14
  • 15. Versiegelte Typen Ziel ist Steuerung der Vererbungs-Hierarchie allgemeine Nutzbarkeit eingeschränkte Ableitbarkeit Schlüsselwörter sealed  versiegelter Typ permits  Liste der zulässigen Untertypen non-sealed  nicht-versiegelter Typ 15
  • 16. Versiegeln einer Schnittstelle Schnittstelle OrderPayment soll nur 3 modellierte Unterklassen haben können 16 public sealed interface OrderPayment permits FirstDeliverThenPay, FirstPayThenDeliver, CreditCard { ...
  • 17. mögliche Zahlungsarten Verfeinerung der Zahlungskategorie FirstDeliverThenPay in 2 Unterarten 17 final non-sealed sealed
  • 18. Versiegeln einer Klasse versiegelte Oberklasse 18 zulässige Unterklassen public final class PurchaseOnInvoice extends FirstDeliverThenPay { ... public non-sealed class PaymentUponCollection extends FirstDeliverThenPay { ... public abstract sealed class FirstDeliverThenPay implements OrderPayment permits PurchaseOnInvoice, PaymentUponCollection { ...
  • 19. mögliche Zahlungsarten Verfeinerung der Zahlungskategorie FirstPayThenDeliver 19 sealed final final final
  • 20. Bewertung versiegelter Typen genauere Modellierung der Domäne Abstraktion nach wie vor möglich weniger defensive Programmierung möglich nicht zulässige neue Unterklassen liefern einen Compiler- Fehler nicht mehr so flexible Vererbung möglich 20
  • 21. Records Record ist Klasse mit folgenden Eigenschaften (implizit) finale Klasse Instanzen sind unveränderbar (immutable) 21 public record Person(String forename, String surname) {} Records verfügen (implizit) über parametrisierten Konstruktor Accessor-Methoden für lesenden Zugriff auf die Attribute Person person = new Person("Silke", "Musterfrau"); String forename = person.forename();
  • 22. Einbetten von Bankdaten in Zahlungsarten einige Zahlungsarten benötigen Daten einer Bankverbindung 22 Record für Daten der Bankverbindung
  • 23. Verfeinerung der Zahlungsart "Kreditkarte" Produkttyp kann als Variante in Summentyp verwendet werden 23 sealed final
  • 24. Records mit variabler Komponenten-Anzahl letzter Komponenten-Typ kann T... sein 24 record NamedTuple(String name, Double... values) { } new NamedTuple("Vektor_1", 0.5); new NamedTuple("Vektor_2", 1.5, 4.234, 8.63);
  • 25. Bewertung Records einfache Implementierung von Daten-Objekten kein Boiler-Plate-Code unveränderbare Objekte (vgl. DDD Value Object) neue Art von Klassen (vgl. zukünftige Entwicklung "primitive objects") 25
  • 26. Pattern Matching (Mustervergleich) Pattern Matching ist ein symbolverarbeitendes Verfahren, welches anhand eines vorgegebenen Musters Teile einer diskreten Struktur identifiziert dabei beschreibt ein Suchmuster mittels Meta- Symbolen eine Menge von diskreten Teilstrukturen 26 kenn' ich von Java nicht
  • 27. Pattern Matching zur Datenverarbeitung - Beispiel Textersetzung in Zeichenketten diskrete Struktur (java.lang.String) Otto Mustermann Suchmuster als regulärer Ausdruck (Pattern) t{2} musterbasierte Transformation (Textersetzung) replaceAll("t{2}", "nn")  Onno Mustermann 27
  • 28. Pattern Matching zur Definition von Funktionen - Beispiel Fibonacci-Folge mathematische Definition als Fallunterscheidung Programm-Code in Haskell mit Pattern Matching 28 fib :: (Integral n) => n -> n fib 0 = 0 fib 1 = 1 fib n = fib(n-1) + fib(n-2) Java 42
  • 29. Systematik des Pattern Matching Pattern Matching für algebraische Datentypen für Summentyp Type Pattern für instanceof für switch Enum (spezieller Summentyp) für switch für Produkttyp Record Pattern Array Pattern (homogener Produkttyp) 29
  • 30. Type Pattern für instanceof ermöglicht Wegfall von Type Castings 30 FirstDeliverThenPay payment = ...; if (payment instanceof PurchaseOnInvoice poi) { return poi.fooOnInvoice(); } else if (payment instanceof PaymentUponCollection puc) { return puc.fooOnCollect(); } else { throw new RuntimeException("unknown type of OrderPayment"); }
  • 31. Type Pattern mit Guarded Pattern boolesche Bedingung zur weiteren Einschränkung 31 public boolean isNullOrEmpty(Object object) { return object == null || object instanceof String s && s.isBlank() || object instanceof Collection c && c.isEmpty(); }
  • 32. Type Pattern für switch default-Zweig noch erforderlich 32 public boolean isNullOrEmpty(Object object) { return switch(object) { case null -> true; case String s && s.isBlank() -> true; case Collection c && c.isEmpty() -> true; default -> false; }; }
  • 33. Type Pattern für switch kein default-Zweig notwendig bei versiegelten Typen Compiler prüft Vollständigkeit 33 FirstDeliverThenPay payment = ...; switch (payment) { case PurchaseOnInvoice poi -> poi.fooOnInvoice(); case PaymentUponCollection puc -> puc.fooOnCollect(); }
  • 34. Record Pattern Record Pattern dient zur Dekonstruktion von Record-Objekten 34 if (object instanceof Person(String f, String s)) { String name = f + " " + s; ... Java 18
  • 35. Array Pattern Array Pattern dient zur Dekonstruktion von Array-Objekten 35 if (object instanceof String[] {var name1, var name2, ...}) { System.out.println(name1 + name2); ... Java 18
  • 36. Bewertung Pattern Matching einfachere Implementierung von Objekt-Dekonstruktion mehr deklarativer Programmier-Stil Compiler-Unterstützung bei fehlenden / neuen Alternativen Vermeidung NPE Pattern können kombiniert / geschachtelt werden neuer "Happen" für Java als (auch) funktionale Programmiersprache 36
  • 37. Vector API API zur Abbildung Vektor-Berechnungen im Java-Programm Vektor-Instruktionen im Befehlssatz des Prozessors 37 23 43 2 4562 -45 0 67 -321 8 lanes scalar (int) Vector<Integer>  IntVector
  • 38. Skalare Instruktion vs. Vektor-Instruktion Multiplikation von ganzen Zahlen mit 3 Quelle: https://en.wikipedia.org/wiki/SIMD 38
  • 39. Single Instruction Single Data (SISD) 8 Additionen von jeweils 2 Zahlen  8 Instruktions-Zyklen 39 23 43 2 4562 -45 0 67 -321 1 2 3 4 4 3 2 1 24 45 5 4566 -41 3 69 -320 + = + + + + + + + = = = = = = =
  • 40. Single Instruction Multiple Data (SIMD) Vektor-Operation parallel "lanewise"  1 Instruktions-Zyklus analog: Reduktion als eine Vektor-Operation parallel "cross-lane" 40 23 43 2 4562 -45 0 67 -321 1 2 3 4 4 3 2 1 24 45 5 4566 -41 3 69 -320 + =
  • 41. Vector API - wozu? 41 Angewandte Mathematik (Numerik, Finanzwesen, ...) Verarbeitung von Bild-, Ton- und Videodaten Kryptographie Machine Learning interne JDK-Optimierung Incubato r
  • 42. Vielen Dank! Schulungen zum Thema: www.gedoplan-it-training.de Projekt-Beratung und -Unterstützung: www.gedoplan-it- consulting.de 42