为什么Java不允许"new List <T>"?

Amy*_*y B 1 java generics

要创建List,为什么Java不允许创建它们然后逐个添加元素?

这有效:

public static List<TrackedItem> create(List<Item> items)
{
    TrackedItem[] arr = new TrackedItem[items.size()];

    int i = 0;
    for (Item item : items)
    {
        arr[i] = TrackedItem.createOrUpdate(item);

        i++;
    }

    return java.util.Arrays.asList(arr);
}
Run Code Online (Sandbox Code Playgroud)

这不起作用(tracked.add()导致a NullPointerException):

public static List<TrackedItem> create(List<Item> items)
{
    List<TrackedItem> tracked = java.util.Collections.emptyList();

    for (Item item : items)
    {
        tracked.add(TrackedItem.createOrUpdate(item));
    }

    return tracked;
}
Run Code Online (Sandbox Code Playgroud)

Ins*_*ere 16

java.util.Collections.emptyList();

static List emptyList()返回空列表(不可变).

这意味着,您将无法更改此列表.

其定义:

static List EMPTY_LIST空列表(不可变).

来自Java sun引用的引用

编辑:

要创建新列表,您可以使用例如

List myList = new ArrayList<MyClass>();
Run Code Online (Sandbox Code Playgroud)