调用静态generics方法

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

class Foo<E> { public static <E> Foo<E> createFoo() { // ... } } class Bar<E> { private Foo<E> member; public Bar() { member = Foo.createFoo(); } } 

我怎么没有在expression式Foo.createFoo()指定任何types的参数? 这是一种types推断? 如果我想明确它,我怎样才能指定types参数?

是的,这是基于分配目标的types推断,按照JLS第15.12.2.8节 。 明确地说,你可以这样称呼:

 Foo.<String>createFoo();