最左边的泛型类型或方法是什么意思,为什么选择此类策略进行类型擦除?

Gee*_*eek 8 java generics

来自Angelika Langer的通用FAQ:

Elide类型参数.

当编译器找到泛型类型或方法的定义时,它会删除所有出现的类型参数,并用最左边的边界替换它们,如果没有指定绑定,则键入Object.

编辑:正如我在这种情况下所理解的那样,最左边的边界意味着它在字面上意味着什么,即在边界列表中最左边.我想明白为什么选择这项政策?

JLR*_*she 9

在这种情况下,"最左边"不是技术术语.字面意思是"最左边".它只是意味着当type参数有几个边界(限制)时,如下所示:

T extends Callable<Long> & Runnable
Run Code Online (Sandbox Code Playgroud)

编译器将类型参数的所有出现替换T为最左边的边界(在这种情况下是Callable<Long>):

这意味着,就像在Angelika的例子中一样:

private T task1, task2; 
Run Code Online (Sandbox Code Playgroud)

替换为:

private Callable task1, task2; 
Run Code Online (Sandbox Code Playgroud)