调用静态泛型方法

我遇到了一个涉及静态泛型方法的奇怪情况,代码如下:

class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}


class Bar<E>
{
private Foo<E> member;


public Bar()
{
member = Foo.createFoo();
}
}

为什么我不必在表达式 Foo.createFoo()中指定任何类型参数?这是某种类型推断吗?如果我想对它进行明确说明,那么如何指定类型参数呢?

83747 次浏览

是的,根据 JLS 章节15.12.2.8,这是基于赋值目标的类型推断。明确地说,你可以这样称呼:

Foo.<String>createFoo();