java - type T 和 Object 有什么区别?

标签 java generics

<分区>

类型 T 和 Object 有什么区别?

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

最佳答案

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

关于java - type T 和 Object 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18467276/

相关文章:

java - Collection.sort 不适用于我的数组

java - 没有任何数字的波斯语(阿拉伯语)字母的正则表达式

java - Eclipse (Helios) 无法加载 DLL

java - java中如何将段落的每个句子存储在字符串中?

java - 二元运算符的操作数类型错误 '+'

c# - 为什么 C# 不支持泛型的泛型(具有参数化类型的泛型)?

java - 提升和重新排序是一回事吗?

java: 当 SomeClass 实现 SomeInterface 时从 List<SomeClass> 转换为 List<SomeInterface>

C#:从泛型调用外部程序集中的重载方法

generics - Swift 中构造泛型类型的扩展