为什么要创建List <object> </object>

时间:2014-09-18 08:41:33

标签: java generics

当有一个通用的List<Object>时,我已经在一些框架和工具中看到了它。创建List的类型为Object的重点是什么?它是否过时或背后有原因?

修改 是的,IDE可能会显示警告,但您可以添加SuppressWarning,因为在我认为使用泛型Object类型

时会产生误导

3 个答案:

答案 0 :(得分:2)

如果您使用泛型类而未指定泛型类型参数(例如List l),则某些IDE和代码检查器会显示警告。

通过添加<Object>,您表明此列表旨在存储对象,并且您不会忘记添加泛型类型参数。

如果您必须使用不支持的旧(Java 1.5之前)代码,这也很有帮助 仿制药。如果在这种情况下看到List l,您永远无法确定它是旧代码(在存在泛型之前编写),还是集合实际存储了Object类型的项目。

答案 1 :(得分:1)

类型参数不是可选的:List是一种与List<Object>完全不同的类型。

Java中存在原始类型的唯一原因是遗留代码。您永远不应该编写引入新原始类型的代码。

ListList<Object>之间的差异变得至关重要的一个重要案例如下:

static void addObject(List<Object> objs) { objs.add("a"); }

static void addObjectToRaw(List objs) { objs.add("a"); }

public static void main(String[] args) {
   final List<Boolean> bools = new ArrayList<>();
   addObject(bools);       // compiler detects error
   addObjectToRaw(bools);  // compiler is silent
}

接受原始List作为参数具有消除所有类型安全的效果。

答案 2 :(得分:-1)

这样做实际上是你可以在其中存储任何对象。

List<Object> objects = new ArrayList<Object>();
objects.add(1);
objects.add("Toto");
objects.add(12.2f);
for(Object o : objects){
  System.out.println(o);
}

将打印: 1 托托 12.2

这就是差异

List<Object> list1 = new ArrayList<Object>();
List<?> list2 = new ArrayList<String>();Now, let's try the code below:

list1.add("");// this works fine
list2.add("");// this one issues a compile error