Draft JLS spec for JEP 305: Pattern matching for instanceof

Remi Forax forax at univ-mlv.fr
Mon Oct 21 17:03:10 UTC 2019


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.bierman at oracle.com>
> À: "amber-spec-experts" <amber-spec-experts at openjdk.java.net>
> Cc: "amber-dev" <amber-dev at 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.bierman at oracle.com |
>> gavin.bierman at 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


More information about the amber-dev mailing list