java - 调用静态泛型方法

我遇到了一个涉及静态泛型方法的奇怪情况。 这是代码:

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

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

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

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

fredoverflow asked 2019-08-13T17:27:57Z
1个解决方案
149 votes

是的,这是基于分配目标的类型推断,根据JLS第15.12.2.8节。 要明确,你可以这样称呼:

Foo.<String>createFoo();
Jon Skeet answered 2019-08-13T17:28:10Z
translate from https://stackoverflow.com:/questions/5297978/calling-static-generic-methods