49 lines
1.4 KiB
Java
49 lines
1.4 KiB
Java
// enumerations/SealedPatternMatch.java
|
|
// (c)2021 MindView LLC: see Copyright.txt
|
|
// We make no guarantees that this code is fit for any purpose.
|
|
// Visit http://OnJava8.com for more book information.
|
|
// {NewFeature} Preview in JDK 17
|
|
// Compile with javac flags:
|
|
// --enable-preview --source 17
|
|
// Run with java flag: --enable-preview
|
|
import java.util.*;
|
|
|
|
sealed interface Transport {};
|
|
record Bicycle(String id) implements Transport {};
|
|
record Glider(int size) implements Transport {};
|
|
record Surfboard(double weight) implements Transport {};
|
|
// If you uncomment this:
|
|
// record Skis(int length) implements Transport {};
|
|
// You get an error: "the switch expression
|
|
// does not cover all possible input values"
|
|
|
|
public class SealedPatternMatch {
|
|
static String exhaustive(Transport t) {
|
|
return switch(t) {
|
|
case Bicycle b -> "Bicycle " + b.id();
|
|
case Glider g -> "Glider " + g.size();
|
|
case Surfboard s -> "Surfboard " + s.weight();
|
|
};
|
|
}
|
|
public static void main(String[] args) {
|
|
List.of(
|
|
new Bicycle("Bob"),
|
|
new Glider(65),
|
|
new Surfboard(6.4)
|
|
).forEach(
|
|
t -> System.out.println(exhaustive(t))
|
|
);
|
|
try {
|
|
exhaustive(null); // Always possible! // [1]
|
|
} catch(NullPointerException e) {
|
|
System.out.println("Not exhaustive: " + e);
|
|
}
|
|
}
|
|
}
|
|
/* Output:
|
|
Bicycle Bob
|
|
Glider 65
|
|
Surfboard 6.4
|
|
Not exhaustive: java.lang.NullPointerException
|
|
*/
|