【发布时间】:2020-01-09 05:10:15
【问题描述】:
我正在尝试将实用程序函数写入 Array 类。
该函数应返回所有可比类型的最小元素。
我的问题是该函数应该具有哪个签名:
-
public static <E> E min (Comparable**<E>**[] arr) public static <E> E min (Comparable**<? super E>**[] arr)
在 Java 中,数组是变体,这意味着如果 B 扩展 A,那么 A[] 和 B[] 也是相关的,但 ArrayList<A> 和 ArrayList<B> 没有相同的连接。
这是完整的代码:
@SuppressWarnings("unchecked")
public static <E> E min (Comparable<E>[] arr){
E min= null;
if(arr.length > 0)
min = (E) arr[0];
for (int i = 1; i < arr.length; i++) {
if( (arr[i].compareTo((E) min)) < 0)
min = (E) arr[i];
}
return min;
}
评论:我有两个类 A 实现 Comparable A 和 B 扩展 A
当签名为 Comparable<? super E> 时,调用(来自 main)到:
A aArr[] = new A[] {new A(1), new B(2), new B(-1)};
B bb = min(aArr);
是一个编译错误:cannoot convert from ...A to ... B,但是当 min() 的签名是 Comparable<? super E> 时,同样的调用就可以了。
谢谢
【问题讨论】:
-
如果您的问题已关闭,您可以接受答案。或者让我们知道,如果您仍在寻找解决方案或澄清
标签: java comparable type-bounds