<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div>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 ?<br></div><div><br data-mce-bogus="1"></div><div>Rémi<br data-mce-bogus="1"></div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>De: </b>"Gavin Bierman" <gavin.bierman@oracle.com><br><b>À: </b>"amber-spec-experts" <amber-spec-experts@openjdk.java.net><br><b>Cc: </b>"amber-dev" <amber-dev@openjdk.java.net><br><b>Envoyé: </b>Lundi 21 Octobre 2019 11:50:11<br><b>Objet: </b>Draft JLS spec for JEP 305: Pattern matching for instanceof <br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">A second, and hopefully final, draft language spec for JEP 305 (Pattern matching for instanceof) is available at:<div class=""><br class=""></div><div class=""><a href="http://cr.openjdk.java.net/~gbierman/jep305/jep305-20191021/specs/patterns-instanceof-jls.html" class="" target="_blank">http://cr.openjdk.java.net/~gbierman/jep305/jep305-20191021/specs/patterns-instanceof-jls.html</a><br data-mce-bogus="1"></div><div class=""><br class=""></div><div class="">Apart from a small number of minor corrections, the two main changes are:</div><div class=""><br class=""></div><div class="">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.</div><div class=""><br class=""></div><div class="">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.)</div><div class=""><br class=""></div><div class="">As always, please email me any comments/thoughts/bugs.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Gavin<br class=""><div><br class=""><blockquote class=""><div class="">On 19 Sep 2019, at 10:28, Gavin Bierman <<a href="mailto:gavin.bierman@oracle.com" class="" target="_blank">gavin.bierman@oracle.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><span style="caret-color: rgb(0, 0, 0);" class="">A draft language spec for JEP 305 (Pattern Matching for instanceof) is available at:</span><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);"></div><div class=""><font class=""><span style="caret-color: rgb(0, 0, 0);" class=""><a href="http://cr.openjdk.java.net/~gbierman/jep305/jep305-20190918/specs/patterns-instanceof-jls.html" class="" target="_blank">http://cr.openjdk.java.net/~gbierman/jep305/jep305-20190918/specs/patterns-instanceof-jls.html</a></span></font><br data-mce-bogus="1"></div><div class=""><br class=""></div><div class=""><font class="">Comments are welcomed on all aspects, but I draw your attention to a couple of things that we’d like your feedback on:</font></div><div class=""><font class=""><br class=""></font></div><div class=""><font class="">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)?</font></div><div class=""><font class=""><br class=""></font></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font class="" face="Menlo">if (o instanceof List<Integer> l) {</font></div><div class=""><font class="" face="Menlo"> <span style="caret-color: rgb(0, 0, 0);" class="">…</span></font></div><div class=""><font class="" face="Menlo">} </font></div></blockquote><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);">2. We’d like to keep the possibility open for merging of multiple pattern declarations, where it makes sense. For example:</div><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="" style="caret-color: rgb(0, 0, 0);"><font class="" face="Menlo">if (a instanceof Foo f || b instanceof Foo f) {</font></div><div class="" style="caret-color: rgb(0, 0, 0);"><font class="" face="Menlo">… // Like to be able to use f here</font></div><div class="" style="caret-color: rgb(0, 0, 0);"><font class="" face="Menlo">} </font></div></blockquote><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);">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…)</div><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);">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?</div><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0);">Thanks,</div><div class="" style="caret-color: rgb(0, 0, 0);">Gavin</div></div></div></blockquote></div><br class=""></div><br></blockquote></div></div></body></html>