Tuyên bố sau đây xác định cấu trúc dữ liệu nào?Java Generics Cú pháp cho mảng
List<ArrayList>[] myArray;
Tôi nghĩ rằng nó nên khai báo một mảng mà mỗi phần tử là một List
(ví dụ, một LinkedList
hoặc một ArrayList
) và yêu cầu rằng mỗi List
chứa ArrayList
đối tượng.
lập luận của tôi:
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
Sau khi chạy một số xét nghiệm, tôi xác định rằng nó chấp nhận một mảng mà mỗi phần tử là một đối tượng LinkedList
và không xác định những gì các đối tượng LinkedList chứa.
Vì vậy, List<ArrayList>
chỉ định những gì List
phải chứa, nhưng List<ArrayList>[]
chỉ định cách thực hiện List
.
Tôi có thiếu gì đó không?
Đây là các thử nghiệm của tôi.
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;
}
}
Mỗi phần tử có thể được gán là myArray [0] = new ArrayList(); –
Dường như tất cả các đối số kiểu chung đã bị tước khỏi mẫu mã của bạn. Điều này có thể xảy ra vì bạn đã đính kèm nó trong thẻ PRE và trang web giải thích các đối số loại là thẻ HTML không đúng định dạng hoặc bị cấm (theo Q31657). Bạn sẽ có thể chỉnh sửa nó. –