14.30.3 is weird to me, why use the cast operation that doesn't raise an exception instead of instanceof granting the null case is handled before ?
Rémi > De: "Gavin Bierman" <gavin.bier...@oracle.com> > À: "amber-spec-experts" <amber-spec-experts@openjdk.java.net> > Cc: "amber-dev" <amber-...@openjdk.java.net> > Envoyé: Lundi 21 Octobre 2019 11:50:11 > Objet: Draft JLS spec for JEP 305: Pattern matching for instanceof > A second, and hopefully final, draft language spec for JEP 305 (Pattern > matching > for instanceof) is available at: > [ > http://cr.openjdk.java.net/~gbierman/jep305/jep305-20191021/specs/patterns-instanceof-jls.html > | > http://cr.openjdk.java.net/~gbierman/jep305/jep305-20191021/specs/patterns-instanceof-jls.html > ] > Apart from a small number of minor corrections, the two main changes are: > 1. We are relaxing the conditions around the typing of the instanceof > operator, > as discussed on the EG list a little while ago. The second operand is no > longer > required to be a reifiable type, but we require the type of the expression can > be convertible to the type by casting conversion, and that casting conversion > does not make use of an unchecked narrowing reference conversion. > 2. The specification for patterns will not now appear in a new chapter, but > in a > new section 14.30. (Sections 14.22-14.29 will remain unused for now, to allow > for further language evolution.) > As always, please email me any comments/thoughts/bugs. > Thanks, > Gavin >> On 19 Sep 2019, at 10:28, Gavin Bierman < [ mailto:gavin.bier...@oracle.com | >> gavin.bier...@oracle.com ] > wrote: >> A draft language spec for JEP 305 (Pattern Matching for instanceof) is >> available >> at: >> [ >> http://cr.openjdk.java.net/~gbierman/jep305/jep305-20190918/specs/patterns-instanceof-jls.html >> | >> http://cr.openjdk.java.net/~gbierman/jep305/jep305-20190918/specs/patterns-instanceof-jls.html >> ] >> Comments are welcomed on all aspects, but I draw your attention to a couple >> of >> things that we’d like your feedback on: >> 1. The instanceof operator restricts the type to be a reifiable reference >> type. >> The spec currently keeps that restriction for type test patterns too. But >> should we go further, i.e. will people expect to be able to say the following >> (given that this *declares* a pattern variable l)? >>> if (o instanceof List<Integer> l) { >>> … >>> } >> 2. We’d like to keep the possibility open for merging of multiple pattern >> declarations, where it makes sense. For example: >>> if (a instanceof Foo f || b instanceof Foo f) { >>> … // Like to be able to use f here >>> } >> The current spec explicitly calls out cases like these as compile-time >> errors, >> to allow for forwards compatibility if we add this feature. But what do you >> think of this feature? (We have textually multiple declarations of a pattern >> variable, but they are “merged”, so they are really the same thing…) >> 3. [Only for spec nerds] I am proposing to add a new Chapter 16 to discuss >> patterns (at the moment it’s short, but we’re planning for it to grow). The >> existing Chapters 16-19 will be renumbered to 17-20. Will this renumbering >> cause problems for anyone? >> Thanks, >> Gavin