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 对此很有帮助。