类型T和对象有什么区别?

时间:2013-08-27 13:45:53

标签: java generics

T型和对象有什么区别?

换句话说,List<T>List<Object>之间有什么区别?

3 个答案:

答案 0 :(得分:7)

在运行时,没有区别: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对象使用完全相同的实现。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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