我可以使用<t implements =“”comparative =“”>或只是<comparative>

时间:2016-03-14 06:24:48

标签: java generics comparable

我可以使用<T implements ..>代替<T extends...>吗?

如果没有extends / implements,我不能使用<Comparable>吗?

为什么或为什么不呢?

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

1 个答案:

答案 0 :(得分:4)

Comparable通用类型(和接口),因此您必须扩展,而不能实施< / em> - 这是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进行排序,但如果愿意,可以使用数组。