java - Comparable Generic 如何使用 ist

标签 java generics interface abstract comparable

我是 Java 的新手。我不明白这个<T extends Comparable<T>> .我的意思是为什么 T在延伸之前?写extends Comparable<T>还不够吗? ?为什么 extends而不是 implements在 javadoc 中它是一个接口(interface),对吧?据我了解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类(即类 TopNPrinter 不打算实现 Comparable 接口(interface))。
当你看到语法class TopNPrinter<T extends Comparable<T>>时,那么你有一个泛型类,它声明了一个名为 T 的类型参数. extends Comparable<T>限制 T实现 Comparable 的类型接口(interface)(T 是通用 Comparable<T> 接口(interface)的类型参数。

第二个:

Is that not enough to write extends Comparable<T>

如果你写了

class TopNPrinter extends Comparable<T>

那么,除非T是现有类型,T将是未定义/未知的。所以,如上所述,T被声明为泛型类型参数。同样,这里的根本问题是需要理解泛型以及泛型类型是如何声明的。我个人找到了 generics faq对此非常有帮助。

关于java - Comparable Generic 如何使用 ist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266459/

相关文章:

.net - IEnumerator<T>.Current 和 IEnumerator.Current 之间的关系以及为什么 IEnumerator<T> 实现 IDisposable

java - 如何在不违反 DRY 原则的情况下检查接口(interface)方法中的参数

.net - WCF 和接口(interface)继承 - 这是一件可怕的事情吗?

java - URLClassLoader ClassNotFoundException 异常

java - 如何将包含反斜杠 (\) 的用户名传递给 jcifs smb?

java - 将 BigDecimal 转换为科学记数法 Java

c++ - 与任何类型的函数的接口(interface)

java - 可插拔集群管理系统

java - 如何从不带参数的java中的静态泛型函数进行转换?

c# - Method.Invoke 因参数计数不匹配而失败