From 33a60736fee273528a2c4cb857ff7f75cff7f3f5 Mon Sep 17 00:00:00 2001 From: ibrahimatay Date: Tue, 21 Nov 2023 19:02:45 +0300 Subject: [PATCH] JEP 409: Sealed Classes --- README.md | 3 ++ java-17/pom.xml | 20 +++++++ .../com/ibrahimatay/JEP409SealedClasses.java | 54 +++++++++++++++++++ pom.xml | 1 + 4 files changed, 78 insertions(+) create mode 100644 java-17/pom.xml create mode 100644 java-17/src/main/java/com/ibrahimatay/JEP409SealedClasses.java diff --git a/README.md b/README.md index 4ff9bcd..854568a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ This repository contains Java examples that are designed to track and document t * [JEP 431](https://openjdk.org/jeps/431): Sequenced Collections * [JEP 444](https://openjdk.org/jeps/444): Virtual Threads +* [Java 17](java-17/) (September, 2021) + * [JEP 409](https://openjdk.org/jeps/409): Sealed Classes + * [Java 16](java-16/) (March, 2021) * [JEP 395](https://openjdk.java.net/jeps/395): Records diff --git a/java-17/pom.xml b/java-17/pom.xml new file mode 100644 index 0000000..783232e --- /dev/null +++ b/java-17/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.ibrahimatay + Java-Features + 1.0-SNAPSHOT + + + java-17 + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/java-17/src/main/java/com/ibrahimatay/JEP409SealedClasses.java b/java-17/src/main/java/com/ibrahimatay/JEP409SealedClasses.java new file mode 100644 index 0000000..4e7b0ea --- /dev/null +++ b/java-17/src/main/java/com/ibrahimatay/JEP409SealedClasses.java @@ -0,0 +1,54 @@ +package com.ibrahimatay; + +/* + +JEP 409: Sealed Classes +https://openjdk.org/jeps/409 + */ + +import java.util.UUID; + +public class JEP409SealedClasses { + public static void main(String[] args) { + System.out.println(getNumberOfSeats(new Truck(100, UUID.randomUUID().toString()))); + System.out.println(getNumberOfSeats(new Car(20, UUID.randomUUID().toString()))); + } + + static int getNumberOfSeats(Vehicle vehicle) { + if (vehicle instanceof Car) { + return ((Car) vehicle).getNumberOfSeats(); + } else if (vehicle instanceof Truck) { + return ((Truck) vehicle).getLoadCapacity(); + } else { + throw new RuntimeException("Unknown instance of Vehicle"); + } + } +} + +sealed interface Vehicle permits Car, Truck { + String getRegistrationNumber(); +} + +record Car(int numberOfSeats, String registrationNumber) implements Vehicle { + + @Override + public String getRegistrationNumber() { + return registrationNumber; + } + + public int getNumberOfSeats() { + return numberOfSeats; + } +} + +record Truck(int loadCapacity, String registrationNumber) implements Vehicle { + + @Override + public String getRegistrationNumber() { + return registrationNumber; + } + + public int getLoadCapacity() { + return loadCapacity; + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3e88ac4..dadcf24 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ java-6 java-16 java-21 + java-17