假设我必须创建一个存储整数ArrayList的数组,数组大小为10.
以下代码将执行此操作:
ArrayList<Integer>[] pl2 = new ArrayList[10];
Run Code Online (Sandbox Code Playgroud)
问题1:
在我看来,更合适的代码
ArrayList<Integer>[] pl2 = new ArrayList<Integer>[10];
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
问题2:
以下两个编译
ArrayList<Integer>[] pl2 = new ArrayList[10]; ArrayList[] pl3 = new ArrayList[10];就参考声明而言pl2,pl3有什么区别?
以下声明指定了哪种数据结构?
List<ArrayList>[] myArray;
Run Code Online (Sandbox Code Playgroud)
我认为它应该声明一个数组,其中每个元素是一个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
Run Code Online (Sandbox Code Playgroud)
在运行一些测试之后,我确定它接受一个数组,其中每个元素都是一个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 …Run Code Online (Sandbox Code Playgroud) 我尝试在Java中定义一个链表列表,如下所示,它编译得很好,但它生成了2条警告消息.
LinkedList<Long> [] hashtable = new LinkedList[10];
warning: [rawtypes] found raw type: LinkedList
LinkedList<Long> [] hashtable = new LinkedList[10];
^
missing type arguments for generic class LinkedList<E>
where E is a type-variable:
E extends Object declared in class LinkedList
HashTable.java:13: warning: [unchecked] unchecked conversion
LinkedList<Long> [] hashtable = new LinkedList[10];
^
required: LinkedList<Long>[]
found: LinkedList[]
Run Code Online (Sandbox Code Playgroud)
所以,我试过了
LinkedList<Long> [] hashtable = new LinkedList<Long>[10];
Run Code Online (Sandbox Code Playgroud)
但这次它甚至不会编译并生成此错误.
HashTable.java:13: error: generic array creation
LinkedList<Long> [] hashtable = new LinkedList<Long>[10];
^
1 error
Run Code Online (Sandbox Code Playgroud)
那么,我该如何正确定义我的链表数组呢?
Eclipse说:Type safety: Unchecked cast from Object to ObjectArrayList<Car>当我这样做时:
final ObjectArrayList<Car> icars = (ObjectArrayList<Car>) cars[i];
Run Code Online (Sandbox Code Playgroud)
其中cars定义为:
final Object[] cars = new Object[1000];
for (int i = 0; i < 1000; i++) {
cars[i] = new ObjectArrayList<Car>();
}
Run Code Online (Sandbox Code Playgroud)
Eclipse建议添加@SuppressWarnings("unchecked")到icarsobject.但是我已经在某处读过注释在Java中被弃用了,所以我应该保留原样吗?
如何在Java中创建genric List?我也可以将Class<T>实例传递给方法.
像这样:
public static <T> List<T> createList(Class<T> clazz) {
List<T> list = new ArrayList<T>();
list.add(clazz.newInstance());
return list;
}
Run Code Online (Sandbox Code Playgroud) java ×5
generics ×3
arrays ×1
casting ×1
linked-list ×1
syntax ×1
type-erasure ×1
types ×1
warnings ×1