And for all this complex analysis we get... some different exception types? 
Doesn't seem like a worthwhile trade.

As I've mentioned already, I think the exception-type thing is mostly a red herring.  We have some existing precendent, which is pretty hard to extrapolate from:

 - Existing switches on enum/string/boxes throw NPE on a null target;
 - (As of 12) enum expression switches throw ICCE when confronted with a novel value.

All the discussion about exception types are trying to extrapolate from these, but it's pretty hard to actually do so.  I would be happy to just have some sort of SwitchRemainderException.

What I'd like to do instead: switch expressions that are optimistically/weakly 
total get an implicit 'default' case that throws 'UnmatchedSwitchException' or 
something like that for *everything* that goes unhandled. Exactly what 
diagnostic information we choose to put in the exception is a quality of 
implementation issue. As a special case, if the unmatched value is 'null' (not 
'Box(null)'), we *might* decide to throw an NPE instead (depending on how your 
ideas about null hostility in switches pan out)

That is, essentially, what I have proposed in my "Totality" thread (I suspect you're still catching up, as it took us a long time to get there.)

This is a behavioral change for enum switch expressions in Java 14+ code, which 
makes me feel a bit sheepish, but I don't think anybody will mind a change now 
that the design has evolved enough to recognize the need for a specific 
exception class.

I don't think we need an incompatible change; we're already sealing off some legacy behavior with enum/string/box switches, we can seal this one off there too.


Reply via email to