V? and generics

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon May 13 20:02:05 UTC 2019


Actually, I'm not sure I see the problem.

The well formedness rules in the JLS say that it must be:

FooOrderable? <: [T:=FooOrderable?]Orderable<T>

(that is, the actual type argument must be a subtype of the bound where 
type-variables are replaced for the type-parameter)

If you expand that you get:

FooOrderable? <: Orderable<FooOrderable?>

Which seems trivially true (the supertype of FooOrderable is the same as 
that of FooOrderable? and is Orderable<FooOrderable?>).

Can we please clarify as to what the problem is?

Maurizio

On 13/05/2019 17:46, Brian Goetz wrote:
> The question about "what about F-bounds" is a good one; thanks for 
> raising this.  Needs further thought.
>
> But, while I agree you've raised a problem, I think it's a pretty big 
> leap to the "solution" you propose.  So let's table that (re-)proposal 
> pending a deeper understanding of the problem, and its relation to the 
> other requirements.
>
> On 5/10/2019 4:50 PM, Remi Forax wrote:
>> Let's say i have this interface:
>>    interface Orderable<T extends Orderable<T>> {
>>     boolean lessThan(T t);
>>    }
>>
>> and i want my inline class to implement it:
>>    @__inline__ class FooOrderable implements Orderable<FooOrderable?> {
>>      ...
>>      @Override
>>      public boolean lessThan(FooOrderable? foo) {
>>        return false;
>>      }
>>    }
>>
>> how i'm suppose to write it given that the bound of FooOrderable as 
>> to be Orderable<FooOrderable> but Orderable<FooOrderable> is not a 
>> valid type ?
>>
>> I think that we have moved from a generic of an inline class is 
>> unsafe (because of the NPEs) to it's an illegal type a little to fast.
>>
>> I believe we should emit an unchecked warning instead with the 
>> definition of unchecked to be widened to include not only the CCEs 
>> but also the NPEs.
>>
>> Rémi
>


More information about the valhalla-spec-observers mailing list