调用静态泛型方法

2022-08-31 08:48:08

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

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

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

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

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


答案 1

是的,这是基于分配目标的类型推断,根据 JLS 第 15.12.2.8 节。为了明确起见,您可以调用如下名称:

Foo.<String>createFoo();

答案 2

推荐