【发布时间】:2021-02-07 02:36:05
【问题描述】:
我对泛型很陌生,如果答案很明显,请见谅。
我有一个函数 max 可以找到数组中的最大值。我正在尝试使用通用数组 E[] 以便可以将任何对象数组传递给它,但是在尝试对其进行测试时,我发现(除非我做错了什么)实际上只需要 E [] 数组...IDE 一直告诉我我做不到。
import java.lang.reflect.Array;
public class Max {
public static <E extends Comparable<E>> E max(E[] list) {
E comp1 = null;
for (E e : list) {
for (int j = 0; j < list.length; j++) {
comp1 = list[0];
if (comp1.compareTo(e) > 0) {
comp1 = e;
}
}
}
return comp1;
}
public static <E> void main (String[] args) {
Boat boat = new Boat(1,2);
Soda pepsi = new Soda(1,2);
Comparable<E>[] oa = new Comparable[100];
Object[] boats = new Boat[20];
Object[] objects = new Object[1];
Object stuff = null;
final E[] a = (E[]) Array.newInstance(1,1);
E e1 = (E) boat;
E e2 = (E) pepsi;
E e3 = (E) stuff;
E[] es = {e1,e2,e3};
Comparable<E>[][] es = {oa};
System.out.println((String) max(objects[0]));
}
}
正如您从底部的 main 方法中看到的那样,我尝试使用对象、对象数组以及 Comparable 对象和所述对象的数组。 max() 拒绝它们,坚持它只获得 E[] 类型。它作为此错误的一部分给出:“原因:不存在类型变量 E 的实例,因此 Object 符合 E[]。”我的目标是用任何对象数组测试 max() 方法,但似乎我误解了泛型在数组的情况下是如何工作的。任何帮助或解释将不胜感激。
【问题讨论】: