[英]Type Bounds In Java Array (sort or minimum) Function
在Java中,Arrays.sort泛型function声明如下:
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);
但是,如果您已经有了一个比较器,或者有一个 class 可以为您提供比较器呢? 您不能只是将Comparator<CharSequence>
‘投射’到Comparator<String>
。
这个想法是:一个可以比较任何 2 个水果的东西当然可以比较任何 2 个苹果。 事物的用户需要告诉编译器它是这样工作的,而你通过说<? super T>
<? super T>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.