Skip to content

Commit 33a6073

Browse files
committed
JEP 409: Sealed Classes
1 parent 9ba0171 commit 33a6073

4 files changed

Lines changed: 78 additions & 0 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ This repository contains Java examples that are designed to track and document t
1010
* [JEP 431](https://openjdk.org/jeps/431): Sequenced Collections
1111
* [JEP 444](https://openjdk.org/jeps/444): Virtual Threads
1212

13+
* [Java 17](java-17/) (September, 2021)
14+
* [JEP 409](https://openjdk.org/jeps/409): Sealed Classes
15+
1316
* [Java 16](java-16/) (March, 2021)
1417
* [JEP 395](https://openjdk.java.net/jeps/395): Records
1518

java-17/pom.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>com.ibrahimatay</groupId>
8+
<artifactId>Java-Features</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
</parent>
11+
12+
<artifactId>java-17</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>17</maven.compiler.source>
16+
<maven.compiler.target>17</maven.compiler.target>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
</properties>
19+
20+
</project>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.ibrahimatay;
2+
3+
/*
4+
5+
JEP 409: Sealed Classes
6+
https://openjdk.org/jeps/409
7+
*/
8+
9+
import java.util.UUID;
10+
11+
public class JEP409SealedClasses {
12+
public static void main(String[] args) {
13+
System.out.println(getNumberOfSeats(new Truck(100, UUID.randomUUID().toString())));
14+
System.out.println(getNumberOfSeats(new Car(20, UUID.randomUUID().toString())));
15+
}
16+
17+
static int getNumberOfSeats(Vehicle vehicle) {
18+
if (vehicle instanceof Car) {
19+
return ((Car) vehicle).getNumberOfSeats();
20+
} else if (vehicle instanceof Truck) {
21+
return ((Truck) vehicle).getLoadCapacity();
22+
} else {
23+
throw new RuntimeException("Unknown instance of Vehicle");
24+
}
25+
}
26+
}
27+
28+
sealed interface Vehicle permits Car, Truck {
29+
String getRegistrationNumber();
30+
}
31+
32+
record Car(int numberOfSeats, String registrationNumber) implements Vehicle {
33+
34+
@Override
35+
public String getRegistrationNumber() {
36+
return registrationNumber;
37+
}
38+
39+
public int getNumberOfSeats() {
40+
return numberOfSeats;
41+
}
42+
}
43+
44+
record Truck(int loadCapacity, String registrationNumber) implements Vehicle {
45+
46+
@Override
47+
public String getRegistrationNumber() {
48+
return registrationNumber;
49+
}
50+
51+
public int getLoadCapacity() {
52+
return loadCapacity;
53+
}
54+
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<module>java-6</module>
1919
<module>java-16</module>
2020
<module>java-21</module>
21+
<module>java-17</module>
2122
</modules>
2223

2324
<properties>

0 commit comments

Comments
 (0)