java - java泛型的区别

标签 java generics

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

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

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

这将如何影响代码

最佳答案

不同之处在于,在第一种情况下,类型参数 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>()上面的行也可以编译。

关于java - java泛型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944582/

相关文章:

java - 如何使用java获取Clob

java - 将 KeyListener 添加到 TitleAreaDialog

java - java 通用类类型

Java8 函数式接口(interface)

java - List<E>.contains(Object),为什么?

java - 为什么这段代码需要这么多内存

java - 为什么有时 Eclipse 在导入工作区时不需要 .project 和 .classpath 文件/Eclipse 如何将项目识别为项目?

java线程执行顺序

java - 使用泛型类访问其他类的其他方法

c# - 获取部分开放泛型类型的类型表示