代码之家  ›  专栏  ›  技术社区  ›  Amy B

为什么Java不允许“新列表< T >”?

  •  1
  • Amy B  · 技术社区  · 14 年前

    要创建一个列表,为什么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() 原因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;
    }
    
    4 回复  |  直到 14 年前
        1
  •  16
  •   InsertNickHere    14 年前

    Java.UTI.Cuff.EvyTyList.();

    静止的 表 EMPTYLIST() 返回空列表(不可变)。

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

    其定义:

    静态列表空列表 空列表(不可变)。

    引文来自 Java sun reference

    编辑:

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

    List myList = new ArrayList<MyClass>();
    
        2
  •  4
  •   Marc van Kempen    14 年前

    使用以下语法:

    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;
    }
    
        3
  •  2
  •   Andreas Dolk    14 年前

    这可能是个误会。

    即使它被称为 emptyList ,它不是一个列表,它只是空的,可以填充。这个 清空表 设计为始终为空。您不能添加到此特殊列表。

    要获得“可用”的空列表,您可以

    List<String> list = new ArrayList<String>();  // create a new one or
    list.add("if you have an list");
    list.clear();                                 // just clear it
    
        4
  •  1
  •   Saher Ahwal    14 年前

    通过以下方式创建新的数组列表:

    List<T> tracked = new ArrayList<T>();
    

    列表只是一个接口…你不能做一个新的。你只能实现它。