如何在数组中转换列表?在Java中

hyy*_*010 1 java arrays casting initialization list

我真的很困惑.我的代码:

public void testList(){
    int cnt = 3;
    LinkedList<LvRow>[] vListItems = new LinkedList[cnt]; //eclipse suggest warnning
    for (int i = 0; i < cnt; i++) {
        vListItems[i] = new LinkedList<LvRow>();
    }
}
Run Code Online (Sandbox Code Playgroud)

日食提示警告:

型号安全: The expression of type LinkedList[] needs unchecked conversion to conform to LinkedList<LvRow>[]

这似乎是一个演员问题.我已经尝试了很多次,但我不知道如何施展.有人可以帮帮我吗?

顺便说一句,如果以下代码相同,或有任何差异?

 LinkedList<LvRow>[] vListItems = new LinkedList[cnt];
 LinkedList<LvRow> vListItems[] = new LinkedList[cnt];
Run Code Online (Sandbox Code Playgroud)

Nar*_*hai 7

无法创建参数化类型的数组

您无法创建参数化类型的数组.例如,以下代码无法编译:

List<Integer>[] arrayOfLists = new List<Integer>[2];  // compile-time error
Run Code Online (Sandbox Code Playgroud)

以下代码说明了将不同类型插入到数组中时会发生什么:

Object[] strings = new String[2];
strings[0] = "hi";   // OK
strings[1] = 100;    // An ArrayStoreException is thrown.
Run Code Online (Sandbox Code Playgroud)

如果您使用通用列表尝试相同的操作,则会出现问题:

Object[] stringLists = new List<String>[];  // compiler error, but pretend it's allowed
stringLists[0] = new ArrayList<String>();   // OK
stringLists[1] = new ArrayList<Integer>();  // An ArrayStoreException should be thrown,
                                            // but the runtime can't detect it.
Run Code Online (Sandbox Code Playgroud)

如果允许参数化列表数组,则前面的代码将无法抛出所需的内容ArrayStoreException.

这一切都是因为类型擦除而发生的.

您应该使用List集合,以便编译器可以执行静态类型检查并为您提供类型安全性.

List<LinkedList<LvRow>> list = new ArrayList<LinkedList<LvRow>>();
Run Code Online (Sandbox Code Playgroud)