非泛型类中的泛型方法

时间:2018-03-05 10:49:03

标签: java generics

我试图理解当你有一个非泛型类时它是如何工作的,但我确实有一个接受泛型类型的方法。它是关于泛型的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型。

我不知道为什么第一个变量被接受,第二个变量不被接受。我也不知道我应该如何做到这一点。如何告诉方法期望什么类型?

1 个答案:

答案 0 :(得分:1)

您正尝试将List作为数组传递。您需要在调用之前将列表转换为数组。

变化

this.compare(Arrays.asList(anArray), new Box<Integer>(4));

this.compare(anArray.toArray(), new Box<Integer>(4));

但你真的应该将变量anArray重命名为aList,或者更好的是,正确地创建数组。