Java泛型的区别

驱魔

请,我想知道写作之间的区别

public class Something<T extends Comparable<T>> {// }

public class Something<T extends Comparable> {// }

以及这将如何影响代码

Arshajii

不同之处在于,在第一种情况下,类型参数T必须与其自身可比,而在第二种情况下,类型参数T可与任何东西相比较。通常,当使一个类C具有可比性时,Comparable<C>无论如何它都声明要实现不过,这是一个示例,其中第一个不起作用而第二个不起作用:

class C1<T extends Comparable<T>> {  // first case
}

class C2<T extends Comparable> {  // second case
}

class A {  // some super class
}

class B extends A implements Comparable<A> {  // comparable to super class
    @Override
    public int compareTo(A o) {
        return 0;
    }
}

现在:

new C1<B>();  // error
new C2<B>();  // works

通常,您永远不应该使用第二种方法。尽可能避免使用原始类型。另请注意,第二种方法的更好选择是

public class Something<T extends Comparable<? super T>> { /*...*/ }

与之配合使用C1将允许new C1<B>()上面行也进行编译。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章