Comparable Generic 如何使用 ist
Comparable Generic how to use ist
我是 Java 的新手。我不明白这个 <T extends Comparable<T>>
。我的意思是为什么 T
before extends?写extends Comparable<T>
还不够吗?为什么在 javadoc 中 extends
而不是 implements
它是一个接口,对吗?据我了解 Comparable
比较两个对象?
public class TopNPrinter<T extends Comparable<T>> {
private int N;
private String header;
public TopNPrinter(int N, String header) {
this.N = N;
this.header = header;
}
private List<T> getTopN(List<T> list) {
List<T> copy = new ArrayList<>(list);
Collections.sort(copy);
return copy.subList(0, N);
}
您遗漏了两件事:
首先,extends Comparable<T>
不适用于您的 TopNPrinter
class(即 class TopNPrinter
不打算实施 Comparable
界面)。
当您看到语法 class TopNPrinter<T extends Comparable<T>>
时,您就有了一个泛型 class,它声明了一个名为 T
的类型参数。 extends Comparable<T>
将 T
限制为实现 Comparable
接口的类型(T
是通用 Comparable<T>
接口的类型参数。
第二个:
Is that not enough to write extends Comparable<T>
如果你写了
class TopNPrinter extends Comparable<T>
那么,除非 T
是现有类型,否则 T
将是 undefined/unknown。因此,如上所述,T
被声明为泛型类型参数。同样,这里的根本问题是需要理解泛型以及泛型类型是如何声明的。我个人认为 generics faq 对此很有帮助。
我是 Java 的新手。我不明白这个 <T extends Comparable<T>>
。我的意思是为什么 T
before extends?写extends Comparable<T>
还不够吗?为什么在 javadoc 中 extends
而不是 implements
它是一个接口,对吗?据我了解 Comparable
比较两个对象?
public class TopNPrinter<T extends Comparable<T>> {
private int N;
private String header;
public TopNPrinter(int N, String header) {
this.N = N;
this.header = header;
}
private List<T> getTopN(List<T> list) {
List<T> copy = new ArrayList<>(list);
Collections.sort(copy);
return copy.subList(0, N);
}
您遗漏了两件事:
首先,extends Comparable<T>
不适用于您的 TopNPrinter
class(即 class TopNPrinter
不打算实施 Comparable
界面)。
当您看到语法 class TopNPrinter<T extends Comparable<T>>
时,您就有了一个泛型 class,它声明了一个名为 T
的类型参数。 extends Comparable<T>
将 T
限制为实现 Comparable
接口的类型(T
是通用 Comparable<T>
接口的类型参数。
第二个:
Is that not enough to write
extends Comparable<T>
如果你写了
class TopNPrinter extends Comparable<T>
那么,除非 T
是现有类型,否则 T
将是 undefined/unknown。因此,如上所述,T
被声明为泛型类型参数。同样,这里的根本问题是需要理解泛型以及泛型类型是如何声明的。我个人认为 generics faq 对此很有帮助。