【问题标题】:<T extends Object & E> vs <T extends E> [duplicate]<T extends Object & E> vs <T extends E> [重复]
【发布时间】:2012-05-07 12:50:32
【问题描述】:

java.util.Collections.max 的签名是这样的:

public static > T max(集合集合);

据我了解,这基本上意味着 T 必须既是java.lang.Object 又是java.lang.Comparable<? super T>>

但是,由于每个java.lang.Comparable 也是一个java.lang.Object,所以上面的签名和下面的这个有什么区别? :

公共静态 > T max(集合集合);

【问题讨论】:

    标签: java generics


    【解决方案1】:

    为了保持二进制兼容性:完全描述了here。第二个签名实际上将方法的返回类型更改为Comparable,它失去了返回Object 的一般性。原始签名保留两者。

    【讨论】:

    • 感谢您的链接 =) 顺便说一句,您知道编译后检查已擦除签名的任何工具吗?
    • 我不知道,但也许this 可以提供有关该主题的一些线索。我还建议阅读 Angelika Langer 的泛型常见问题解答中关于“类型擦除”的部分。
    • @Pacerier,是的,使用“javap -s”。
    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 2020-08-22
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多