当静态导入时,如何使用类型调用Generic方法?

Vis*_*hao 13 java generics static-import

我发现你可以使用特殊类型调用泛型方法,例如:

假设我们有一个通用的方法:

class ListUtils {
    public static <T> List<T> createList() {
        return new ArrayList<T>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我们可以称之为:

List<Integer> intList = ListUtils.<Integer>createList();
Run Code Online (Sandbox Code Playgroud)

但是,当它静态导入时我们怎么称它呢?例如:

List<Integer> intList = <Integer>createList();
Run Code Online (Sandbox Code Playgroud)

这不起作用.

Boz*_*zho 9

你不能.您必须使用类名引用它.

似乎有:

void foo(List<String> a) {}
Run Code Online (Sandbox Code Playgroud)

并且调用foo(createList())不会推断出正确的类型.所以你要么显式地使用类名,ListUtils.createList()要么使用中间变量:

List<String> fooList = createList();
foo(fooList);
Run Code Online (Sandbox Code Playgroud)

最后,番石榴Lists.newArrayList(),所以你最好重复使用它.