RFR: 8343580: Type error with inner classes of generic classes in functions generic by outer

Aggelos Biboudis abimpoudis at openjdk.org
Wed May 21 14:48:57 UTC 2025


On Wed, 21 May 2025 14:38:18 GMT, Chen Liang <liach at openjdk.org> wrote:

>> You mean an intersection type? I think you are right. So, do you have something like the following, in mind?
>> 
>> 
>> static class Usage<T, G extends Getters<T> && SomethingElse> {
>>     public T test(G.Getter getter) {
>>         return getter.get();
>>     }
>> }
>> 
>> 
>> `G` would be raw if `SomethingElse` is raw if its definition is parametric, e.g. `interface SomethingElse<T>` and not raw if its definition is really `interface SomethingElse`. Did you mean that?
>
> Nah, I was more thinking about
> 
> <T, U extends Getters<T>, G extends U>

I think that wouldn't be a problem.

In the original example we try to type-check `G.Getter`. 
With your example `<T, U extends Getters<T>, G extends U>` we would type check `G.Getter` for validity and then `U.Getter`. But maybe I am wrong. 

In any case, both cases deserve corresponding test cases and correct treatment. Thanks @liach. Will update.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25346#discussion_r2100489041


More information about the compiler-dev mailing list