This is exactly why I asked you to provide a *complete* proposal. Sent from my iPad
> On Aug 8, 2020, at 5:04 PM, fo...@univ-mlv.fr wrote: > > > > > De: "Brian Goetz" <brian.go...@oracle.com> > À: "Guy Steele" <guy.ste...@oracle.com> > Cc: "Remi Forax" <fo...@univ-mlv.fr>, "amber-spec-experts" > <amber-spec-experts@openjdk.java.net>, "John Rose" <john.r.r...@oracle.com> > Envoyé: Vendredi 7 Août 2020 16:48:13 > Objet: Re: Nullable switch > > Okay, so it would seem that we need two keywords (or other syntax) for use in > patterns; I will temporarily call them “anything-but-null” and > “anything-including-null”. > > Not necessarily; the approach we've been driving towards has no (new) > keywords, and no _explicit_ consideration of nullability. There's just type > patterns, but their semantics take into account whether or not the type > pattern "covers" the target type. This is subtle, I grant, and I can see > where people would get confused, but it is far more compositional and less > ad-hoc. > > Ignoring the epicyclical* distastefulness of the "any x" idea, I think the > the syntax issues are a bit of a red herring -- the issue is structural. > Under Remi's proposal, there is simply _no_ way to write a switch where any > number of cases covers "anything including null", because the switch will > throw before you get there: > > switch (x) { > case String s: > case Object o: > } > > would throw on NPE (as switches do today) before any cases are considered, > whether you say "var" or "any" or "Object." > > That is not true. > You're right that the switch above will generate a NPE as the switches do > today because under the rules i propose, there is no case that accept null. > > But if you add an any case (or a null case), then the switch will accept null, > by example, the switch below accept null. > switch (x) { > case String s: > case any o: > } > > As Guy said, i'm proposing to have two different cases, one > “anything-but-null” and one “anything-including-null” instead of relying on > the non-local property of totality. > > You can re-read my email from the 6th of August for the rules allowing a > switch to accept null and more examples. > > regards, > Rémi >