4

类型 T 和 Object 有什么区别?

换句话说List<T>和 和有什么不一样List<Object>

4

3 回答 3

10

在运行时,没有区别:Java 泛型是通过Type Erasure实现的,因此在所有实现中都使用同一个类。

然而,在编译时,差异是巨大的,因为它可以让您避免每次使用对象时进行强制转换,从而使您的代码看起来更清晰。

考虑这个例子:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
for (Integer n : list) {
    System.out.println(n+5);
}

这编译和运行良好,而且它也易于阅读。如果你想List<Object>改用,代码看起来不会那么干净:

List<Object> list = new ArrayList<Object>();
list.add(1);
list.add(2);
list.add(3);
for (Object o : list) {
    // Now an explicit cast is required
    Integer n = (Integer)o;
    System.out.println(n+5);
}

list不过,在内部,这两个代码片段对它们的对象使用了完全相同的实现。

于 2013-08-27T13:48:24.953 回答
2

List<T>被称为泛型,因此保证 List 将始终包含 T 类型的对象。而另一个不保证对象是相同的类型,实际上您只知道它们是对象。

于 2013-08-27T13:47:33.737 回答
0

List<T>是泛型类的名称。List<Object>是它的具体实例。List<T>还不是一个类(它是一个泛型类,一个可以从中创建具体类的模板,但不是一个可以立即使用的类),List<Object>是一个类。

于 2013-08-27T13:47:43.080 回答