【发布时间】:2010-09-16 04:22:17
【问题描述】:
以下声明指定什么数据结构?
List<ArrayList>[] myArray;
我认为它应该声明一个数组,其中每个元素都是 List(例如,LinkedList 或 ArrayList)并要求每个 List 包含 ArrayList 对象。
我的推理:
List<String> someList; // A List of String objects
List<ArrayList> someList; // A List of ArrayList objects
List<ArrayList>[] someListArray; // An array of List of ArrayList objects
在运行了一些测试之后,我确定它接受一个数组,其中每个元素都是一个LinkedList 对象,并且没有指定 LinkedList 对象包含的内容。
所以List<ArrayList> 指定List 必须包含的内容,但List<ArrayList>[] 指定List 必须如何实现。
我错过了什么吗?
这是我的测试。
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;
public class Generics1 {
public static void main(String[] args) {
List<ArrayList>[] someListArray;
someListArray = getArrayWhereEachElementIsAnArrayListObject();
// Why does this satisfy the declaration?
//someListArray[0] => ArrayList object holding Strings
someListArray= getArrayWhereEachElementIsAListOfArrayListObjects();
//someListArray[0] => ArrayList object holding ArrayList objects
}
public static List[] getArrayWhereEachElementIsAnArrayListObject() {
List[] arrayOfLists = new ArrayList[2];
arrayOfLists[0] = getStringList();
arrayOfLists[1] = getIntegerList();
return arrayOfLists;
}
public static List[] getArrayWhereEachElementIsAListOfArrayListObjects() {
List list1 = new ArrayList();
list1.add(getArrayList());
List list2 = new ArrayList();
list2.add(getArrayList());
List[] arrayOfListsOfArrayLists = new ArrayList[2];
arrayOfListsOfArrayLists[0] = list1;
arrayOfListsOfArrayLists[1] = list2;
return arrayOfListsOfArrayLists;
}
public static List getStringList() {
List stringList= new ArrayList();
stringList.add("one");
stringList.add("two");
return stringList;
}
public static List getIntegerList() {
List intList= new ArrayList();
intList.add(new Integer(1));
intList.add(new Integer(2));
return intList;
}
public static ArrayList getArrayList() {
ArrayList arrayList = new ArrayList() ;
return arrayList;
}
}
【问题讨论】:
-
每个元素可能被分配为 myArray[0] = new ArrayList
(); -
看起来所有泛型类型参数都已从您的代码示例中删除。之所以会发生这种情况,是因为您将它包含在 PRE 标记中,并且该站点将类型参数解释为格式错误或禁止的 HTML 标记(根据 Q31657)。您应该可以对其进行编辑。
标签: java generics syntax types