Patterns design question: Generics

Remi Forax forax at
Sat Nov 11 12:41:50 UTC 2017

These rules seem fine too me. 

Because you ask, the other solution is to introduce a raw type conversion of U, so the first bullet point can be T as to be cast convertible to raw(U). 


> De: "Gavin Bierman" <gavin.bierman at>
> À: "amber-spec-experts" <amber-spec-experts at>
> Envoyé: Vendredi 3 Novembre 2017 11:46:40
> Objet: Patterns design question: Generics

> Generics

> A related problem to the issue of null and pattern matching is dealing with
> patterns mentioning generic types. Currently, it is forbidden to use instanceof
> with a non-reifiable type. However, we suspect that Java programmers would
> expect the following to work:
> ArrayList<Integer> al = ...
> if (al matches List<Integer> li) {
>     ...
> }

> Whereas perhaps it is to be expected that the following is suspect
> Object o = ...
> if (o matches List<Integer> li) {
>     // How could we perform this test?
> }

> The type restatement distinction that we introduced in the previous email for
> dealing with null provides a way forward.

> More formally, given an expression e matches U u where e has type T :

>    * If T is assignment convertible to U then this is a type restatement pattern
>     match, and is allowed regardless of the type U (even if it is non-reifiable).
>    * If T is cast convertible to U , but not assignment convertible, then we emit a
>     warning/error as per the cast conversion rules.

> Do we have any other design options here?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list