要创建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);
}
这不起作用(tracked.add()
导致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;
}
答案 0 :(得分:16)
java.util.Collections.emptyList();
静态 名单 的emptyList() 返回空列表(不可变)。
这意味着,您将无法更改此列表。
其定义:
的报价静态列表EMPTY_LIST 空列表(不可变)。
编辑:
要创建新列表,您可以使用例如
List myList = new ArrayList<MyClass>();
答案 1 :(得分:4)
使用以下语法:
public static List<TrackedItem> create(List<Item> items)
{
List<TrackedItem> tracked = new ArrayList<TrackedItem>();
for (Item item : items)
{
tracked.add(TrackedItem.createOrUpdate(item));
}
return tracked;
}
答案 2 :(得分:2)
这可能是一种误解。
即使它被称为emptyList
,它也不是一个空的并准备填充的列表。此emptyList
始终为空。您无法添加到此特殊列表中。
要获得“可用的”空列表,您可以
List<String> list = new ArrayList<String>(); // create a new one or
list.add("if you have an list");
list.clear(); // just clear it
答案 3 :(得分:1)
通过以下方式创建一个新的arrayList:
List<T> tracked = new ArrayList<T>();
列表只是一个界面...你不能创建一个新界面。你只能实现它。