【问题标题】:What is the difference between type T and Object? [duplicate]T型和Object有什么区别? [复制]
【发布时间】:2017-05-04 19:30:46
【问题描述】:

类型 T 和 Object 有什么区别?

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

【问题讨论】:

标签: java generics


【解决方案1】:

在运行时,没有区别: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&lt;Object&gt;,代码看起来不会那么干净:

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);
}

不过,在内部,两个代码 sn-ps 对其list 对象使用完全相同的实现。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但是这里的 T 仍然是一种对象并且也需要强制转换,对吗?与 T 相比有什么优势,因为它也是未知类型
    【解决方案3】:

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

    【讨论】:

    • 这根本没有意义。
    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多