Type Bounds In Java Array (sort or minimum) Function



在Java中,数组Sort泛型函数声明如下:

public static <T> void sort(T[] a, Comparator<? super T> c)

可以提供一个例子,说明上面的定义可以成功,而下面的定义不能:

public static <T> void sort(T[] a, Comparator<T> c)
Comparator<CharSequence> onLength = Comparator.comparingInt(CharSequence::length);
String[] test = {"hello", "you"};
Arrays.sort(test, onLength);
System.out.println(Arrays.toString(test));

如果签名仅仅是sort(T[] a, Comparator<T> c),上面的操作就会失败——在这种情况下,只有一个Comparator<String>就足够了。

你可以简单地写:

Comparator<String> onLength = Comparator.comparingInt(String::length);

但是如果你已经有了一个比较器,或者有一个类为你提供了比较器呢?你不能把Comparator<CharSequence>'cast'到Comparator<String>

这个想法是:一个可以比较任意两个水果的东西当然也可以比较任意两个苹果。这个东西的用户需要告诉编译器它是这样工作的,你可以这样说<? super T>.

最新更新