我正在尝试将实用函数写入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>
时,则呼叫(从主):
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>
时,相同的调用就可以了。
谢谢