Agreed, Maurizio. Jan has pushed a patch for this. Now if you compile with 
`-Xlint:rawtypes` you’ll get a warning for `o instanceof Foo foo` - this was 
just an oversight. 

Gavin

> On 19 Mar 2021, at 18:52, Maurizio Cimadamore 
> <[email protected]> wrote:
> 
> 
> On 15/03/2021 13:28, Brian Goetz wrote:
>> Unchecked conversions are forbidden because of type pollution, that why you 
>> can not write
>>   if (o instanceof Foo<Integer> foo) {
>> 
>> Raw type conversions also leads to type pollution, so i think that a type 
>> pattern with a raw type should be forbidden too.
> 
> Note sure I agree here - they are two very different kind of pollutions.
> 
> In the Foo<Integer> case the issue is that we might any type that converts to 
> Foo<Integer> to be treated as a Foo<Integer>. E.g. Foo<? extends Number> -> 
> Foo<Integer>. That is unsound, and the unsoundness happens in the conversion 
> itself.
> 
> But when you say `o instanceof Foo f`, you are not introducing any pollution. 
> The pollution will be introduced when (and if) the raw type will be accessed.
> 
> Honestly, I'm not even sure this deserves a warning (other than the customary 
> "raw-type usage" warning - not an "unchecked" warning, to be clear).
> 
> Maurizio
> 

Reply via email to