我试图理解当你有一个非泛型类时它是如何工作的,但我确实有一个接受泛型类型的方法。它是关于泛型的oracle java tutorial。
public class Box<T> {
private T obj;
public Box (T t) { this.obj = t; }
public T get() { return obj; }
public void set(T obj) { this.obj = obj; }
}
其次是:
public Class Util {
public static void compareTest() {
List<Box<Integer>> anArray = new ArrayList<>();
anArray.add(new Box<Integer>(new Integer(3)));
anArray.add(new Box<Integer>(new Integer(4)));
anArray.add(new Box<Integer>(new Integer(5)));
this.compare(Arrays.asList(anArray), new Box<Integer>(4));
}
private static <T> void compare(T[] anArray, T element) {
}
}
从我的理解,因为该类不是通用的(不是Util<T>
),该方法不一定知道这个<T>
是什么,我不知道如何明确告诉它。
我第一次尝试通过:
this.compare(anArray, new Box<Integer>(4));
但它抱怨这两个参数。我意识到anArray
不是一个盒子列表,所以我使用了Arrays.asList(..)
,现在它并没有抱怨第一个变量。它仍然抱怨Box不是T型。
我不知道为什么第一个变量被接受,第二个变量不被接受。我也不知道我应该如何做到这一点。如何告诉方法期望什么类型?
您正在尝试将List
作为数组传递。您需要在调用之前将列表转换为数组。
更改
this.compare(Arrays.asList(anArray), new Box<Integer>(4));
至
this.compare(anArray.toArray(), new Box<Integer>(4));
但你真的应该将变量anArray
重命名为aList
,或者更好的是,正确地创建数组。