Java 27 and 26: runnable demos and captured output for every JEP, plus version lanes
Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01B38FGKKam5SCGgwgduVAh3
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# 5. Primitive types in patterns (JEP 532, fifth preview)
|
||||
|
||||
Prev: [4. Post-quantum TLS](04-post-quantum-tls.md) · Next: [6. Lazy constants](06-lazy-constants.md)
|
||||
|
||||
Compile and run with `--enable-preview --release 27`. Source: [`PrimitivePatterns`](../jep-tour/src/PrimitivePatterns.java), transcript [23](output/23-primitive-patterns.txt).
|
||||
|
||||
## The idea in one sentence
|
||||
|
||||
A pattern may now name a primitive type, and the test is **"can this value be converted to that type without losing information?"**. It is an exactness test, not a cast.
|
||||
|
||||
```java
|
||||
int small = 100, big = 300;
|
||||
small instanceof byte // true : 100 fits
|
||||
big instanceof byte // false : a byte holds -128..127
|
||||
16_777_216 instanceof float // true
|
||||
16_777_217 instanceof float // false : a float has a 24-bit significand
|
||||
```
|
||||
|
||||
You can also `switch` on a `long`, `float`, `double` or `boolean`, use `case int` against an `Integer`, and put a narrowing primitive in a record pattern:
|
||||
`Reading(byte c)` matches `Reading[celsius=36]` but not `Reading[celsius=4000]` ([23](output/23-primitive-patterns.txt)).
|
||||
|
||||
## The compile error you will meet
|
||||
|
||||
Dominance rules apply. Put `case Integer i` before `case int primitive` and the second label can never match:
|
||||
|
||||
```
|
||||
error: this case label is dominated by a preceding case label
|
||||
```
|
||||
|
||||
The real text is in [20-broken-dominated.txt](output/20-broken-dominated.txt); source in [`Dominated.java`](../jep-tour/src/broken/Dominated.java).
|
||||
|
||||
Prev: [4. Post-quantum TLS](04-post-quantum-tls.md) · Next: [6. Lazy constants](06-lazy-constants.md)
|
||||
Reference in New Issue
Block a user