这是java中的类型推断吗?

时间:2011-06-09 09:33:56

标签: java type-inference

我有一个通用的方法

public <K extends Number> K get()
{
    ...
}

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

Integer i = instance.<Integer>get();

但是,这也是合法的:

Integer i = instance.get();

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

1 个答案:

答案 0 :(得分:5)

是的,这是基于分配类型的类型推断。它在JLS的section 15.12.2.8中指定:

  

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

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

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

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

并使用部分算法(第15.12.2.7节)推断类型参数的约束。解决任何相等约束,然后,对于形式Ti&lt;:Uk的每个剩余约束,推断参数Ti为glb(U1,...,Uk)(§5.1.10)。