让我解释一下这个场景。
如果我没错,Generics
中的java
仅用于编译时类型安全。
如果我写
List<String> list = new LinkedList<String>(); // fine
list.add("test"); // fine
这很好。但是 如果我写
List list = new LinkedList<String>(); // fine
list.add(9); // fine
这里我创建了LinkedList
字符串,List
变量指向LinkedList
。
允许将integer
插入list
。
现在,Generics
与类型相关。Type
List
是generics
而我没有写List<String> list
,即generics
因此,在创建object
而不在左侧书写时,在右侧书写List
不会使generic
List list = new LinkedList<String>();
。
那么为什么编译器不会在运行/编译时为后续语句
Generics
在java
中使用{{1}}时编写此类声明是无用的。
答案 0 :(得分:2)
您不应使用泛型类型List
实例化原始类型List<T>
。编译器会给你一个警告;但是,这可以通过Type Erasure完成。
答案 1 :(得分:2)
实际上,如果你写的话,你会得到一个“rawtypes”警告:
List list = new LinkedList<String>();
答案 2 :(得分:2)
答案 3 :(得分:0)
从JDK 1.5开始,Java引入了Generics,它用于定义Collection内容的类型。 如果你像这样初始化一个ArrayList ..
List list = new ArrayList();
然后列表可以包含任何类型的数据,它可以是String,Integer或Object。但如果你想用特定的数据类型定义你的List,你可以用尖括号来定义它,就像这样..
List<String> list = new ArrayList<String>();
答案 4 :(得分:0)
是的,这将使用原始类型警告进行编译,您可以插入任何类型的Object。由于类型擦除,它也将在运行时工作。
但这应该避免,因为它没有意义。