这是java中的类型推断吗?

3 java type-inference

我有一个通用的方法

public <K extends Number> K get()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我调用此方法时,我使用如下语法:

Integer i = instance.<Integer>get();
Run Code Online (Sandbox Code Playgroud)

但是,这也是合法的:

Integer i = instance.get();
Run Code Online (Sandbox Code Playgroud)

我的问题是,第二种方法是在Java中调用一种类型推断吗?

Jon*_*eet 5

是的,这是基于分配类型的类型推断.它在JLS的第15.12.2.8节中规定:

如果没有从实际参数的类型推断出任何方法的类型参数,现在推断它们如下.

  • 如果方法结果发生在它将受到赋值转换(第5.2节)到类型S的上下文中,那么让R成为方法的声明结果类型,并让R'= R [T1 = B(T1) ...... Tn = B(Tn)]其中B(Ti)是上一节中Ti的推断类型,如果没有推断出类型,则推断Ti.

然后,一组初始约束包括:

  • 约束S >> R',条件是R不是空的; 和
  • 附加约束Bi [T1 = B(T1)... Tn = B(Tn)] >> Ti,其中Bi是Ti的声明界限,

创建并用于使用section(第15.12.2.7节)的算法推断类型参数的约束.解决任何等式约束,然后,对于形式Ti <:Uk的每个剩余约束,推断参数Ti为glb(U1,...,Uk)(第5.1.10节).