有人可以解释这些通用语法吗?

时间:2018-11-05 08:21:15

标签: java generics

我正在浏览Java库,并在Arrays.java中看到了这段代码:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

我只是想知道那不是吗?

return new ArrayList<T>(a);

我的猜测是它正在ArrayList.java中调用此方法:

public ArrayList(Collection<? extends E> c) {
    elementData = c.toArray();
    if ((size = elementData.length) != 0) {
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
        } else {
            // replace with empty array.
            this.elementData = EMPTY_ELEMENTDATA;
        }
    }
}

问号在Collection意味着什么?

1 个答案:

答案 0 :(得分:4)

从Java 7开始,您可以使用return new ArrayList<>(a);而不是return new ArrayList<T>(a);,它将自动添加所需的类型。将其用作<>会告诉编译器它具有一种类型,并且与正确的类型匹配(无论如何泛型都只是元信息)