Add patterns module: pattern matching from JDK 21 to 27
Type, record and primitive patterns, guards, sealed exhaustiveness, MatchException via separate compilation, and eight captured transcripts. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01TF9JWFvJSNm6HVzswzZU5a
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
$ javac preview/PrimitiveInstanceof.java (25.0.4.1+1-LTS)
|
||||
preview/PrimitiveInstanceof.java:3: error: primitive patterns are a preview feature and are disabled by default.
|
||||
if (i instanceof byte b) return i + " fits in a byte: " + b;
|
||||
^
|
||||
(use --enable-preview to enable primitive patterns)
|
||||
1 error
|
||||
|
||||
$ javac preview/PrimitiveInstanceof.java (27+35)
|
||||
preview/PrimitiveInstanceof.java:3: error: primitive patterns are a preview feature and are disabled by default.
|
||||
if (i instanceof byte b) return i + " fits in a byte: " + b;
|
||||
^
|
||||
(use --enable-preview to enable primitive patterns)
|
||||
1 error
|
||||
|
||||
$ javac --enable-preview --release 25 preview/PrimitiveInstanceof.java && java --enable-preview PrimitiveInstanceof (25.0.4.1+1-LTS)
|
||||
100 fits in a byte: 100
|
||||
1000 fits in a short: 1000
|
||||
100000 needs an int
|
||||
0.5 converts to float 0.5 without loss
|
||||
0.1 does NOT convert to float without loss
|
||||
|
||||
$ javac --enable-preview --release 27 preview/PrimitiveInstanceof.java && java --enable-preview PrimitiveInstanceof (27+35)
|
||||
100 fits in a byte: 100
|
||||
1000 fits in a short: 1000
|
||||
100000 needs an int
|
||||
0.5 converts to float 0.5 without loss
|
||||
0.1 does NOT convert to float without loss
|
||||
|
||||
$ javac --enable-preview --release 25 preview/PrimitiveSwitch.java && java --enable-preview PrimitiveSwitch (25.0.4.1+1-LTS)
|
||||
OK | other success 204 | client error 404 | something else 500
|
||||
yes no
|
||||
zero one many (9223372036854775807)
|
||||
|
||||
$ javac --enable-preview --release 27 preview/PrimitiveSwitch.java && java --enable-preview PrimitiveSwitch (27+35)
|
||||
OK | other success 204 | client error 404 | something else 500
|
||||
yes no
|
||||
zero one many (9223372036854775807)
|
||||
|
||||
$ javac --enable-preview --release 25 preview/PrimitiveInRecord.java && java --enable-preview PrimitiveInRecord (25.0.4.1+1-LTS)
|
||||
whole degrees: 21
|
||||
fractional: 21.5
|
||||
not a reading
|
||||
|
||||
$ javac --enable-preview --release 27 preview/PrimitiveInRecord.java && java --enable-preview PrimitiveInRecord (27+35)
|
||||
whole degrees: 21
|
||||
fractional: 21.5
|
||||
not a reading
|
||||
|
||||
$ javac --enable-preview --release 25 preview/PrimitiveEdges.java && java --enable-preview PrimitiveEdges (25.0.4.1+1-LTS)
|
||||
0.0 int? true float? true
|
||||
-0.0 int? false float? true
|
||||
NaN int? false float? true
|
||||
1.6777217E7 int? true float? false
|
||||
1.0E10 int? false float? true
|
||||
3.0 int? true float? true
|
||||
1099511627776 instanceof int? false
|
||||
Object holding Integer matches int pattern: 42
|
||||
Short in Object does not match int
|
||||
65 as char: A
|
||||
|
||||
$ javac --enable-preview --release 27 preview/PrimitiveEdges.java && java --enable-preview PrimitiveEdges (27+35)
|
||||
0.0 int? true float? true
|
||||
-0.0 int? false float? true
|
||||
NaN int? false float? true
|
||||
1.6777217E7 int? true float? false
|
||||
1.0E10 int? false float? true
|
||||
3.0 int? true float? true
|
||||
1099511627776 instanceof int? false
|
||||
Object holding Integer matches int pattern: 42
|
||||
Short in Object does not match int
|
||||
65 as char: A
|
||||
|
||||
$ javac --enable-preview --release 25 preview/BoxedToNarrower.java && java --enable-preview BoxedToNarrower (25.0.4.1+1-LTS)
|
||||
preview/BoxedToNarrower.java:4: error: incompatible types: Integer cannot be converted to byte
|
||||
if (boxed instanceof byte b) System.out.println("fits a byte: " + b); // Integer to byte is not allowed
|
||||
^
|
||||
1 error
|
||||
Error: Could not find or load main class BoxedToNarrower
|
||||
Caused by: java.lang.ClassNotFoundException: BoxedToNarrower
|
||||
|
||||
$ javac --enable-preview --release 27 preview/BoxedToNarrower.java && java --enable-preview BoxedToNarrower (27+35)
|
||||
preview/BoxedToNarrower.java:4: error: incompatible types: Integer cannot be converted to byte
|
||||
if (boxed instanceof byte b) System.out.println("fits a byte: " + b); // Integer to byte is not allowed
|
||||
^
|
||||
1 error
|
||||
Error: Could not find or load main class BoxedToNarrower
|
||||
Caused by: java.lang.ClassNotFoundException: BoxedToNarrower
|
||||
Reference in New Issue
Block a user