Previously, I wrote about how switch
statements and expressions had been enhanced to match on type patterns, and also how "guarded patterns" can be used to refine a pattern so that it is only matched on certain conditions.
In Java 19, the syntax of the guarded pattern has been changed so that instead of using &&
, you need to use a when
clause, as shown in the example below.
static String guardedPattern(Collection<String> coll) { return switch(coll) { case null -> "Collection is null!"; case List list when list.size() > 10 -> "I am a big List. My size is " + list.size(); case List list -> "I am a small List. My size is " + list.size(); default -> "Unsupported collection: " + coll.getClass(); }; }
As an aside, it's worth pointing out how null
s are handled within the switch block. The default
label does NOT match null
s, so you need to explicitly add a case null
, otherwise you will get a NullPointerException
. This is for backwards compatibility with the current semantics of switch
.
Java 17: Pattern Matching for Switch
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.