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

blu*_*sky 3 java generics

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

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

das*_*ght 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);
}
Run Code Online (Sandbox Code Playgroud)

这编译并运行良好,也易于阅读.如果你想使用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);
}
Run Code Online (Sandbox Code Playgroud)

但是,在内部,两个代码片段对其list对象使用相同的精确实现.