java - 我可以使用 <T Implements Comparable> 还是仅使用 <Comparable>

标签 java generics comparable

我可以使用 <T implements ..>而不是<T extends...>

我不能使用 <Comparable>只是没有扩展/实现?

为什么或为什么不?

class SomeClass
{
   public static <T extends Comparable> somemethod(T[] a)
   {
        // do stuff
   }
}

最佳答案

Comparable 是一个通用类型(以及一个接口(interface)),因此您必须扩展并且不能>implement - 这是Java泛型的工作方式,而且你的方法缺少返回签名。您可以使用 Lower Bounded Wildcard喜欢

public static <T extends Comparable<? super T>> T[] somemethod(T... a) {
    Arrays.sort(a);
    return a;
}

它应该按您的预期工作1。例如,

public static void main(String[] args) {
    System.out.println(Arrays.toString(somemethod(4, 3, 1, 2)));
    System.out.println(Arrays.toString(somemethod(new Integer[] { 8, 7, 6, 5 })));
}

输出

[1, 2, 3, 4]
[5, 6, 7, 8]

1这里,一个 variadic (varargs) function排序,但如果您愿意,您可以使用数组。

关于java - 我可以使用 <T Implements Comparable> 还是仅使用 <Comparable>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980808/

相关文章:

java - 两个 Comparables 的最小/最大函数

java - Array.sort() 是否实现了可比较?当我查看 Array 类时,它没有,那么这里的排序是如何工作的呢?

java - 当我调整大小时,JPanel 大小问题

java - Java能不能像C一样直接打开设备文件节点?

java - 为实现 Comparable 的泛型类创建一个 compareTo

c# - 在简单注入(inject)器中注册部分开放的泛型

java - Java 中的泛型和反射

java - Java指南中关于并发的问题

可以超过 n = 2^32 的埃拉托色尼筛法的 Java 实现?

c# - 我可以在泛型类中使用 T 的静态字段吗