有没有办法将通用数组作为参数传递

时间:2013-11-25 20:58:25

标签: java

我的问题很简单:

我的泛型类中有以下方法(类型参数为A和B)

public void add(A elem, int pos, B[] assoc)

我想要做的是创建一个方法

public void add(A elem, int pos)

使用assoc中的空数组调用upper方法。 到目前为止,我已经找到了一个解决方案,因为Java不允许实例化泛型类型的数组。

3 个答案:

答案 0 :(得分:4)

接受通用数组的Java泛型方法。

public <T> void printArray(T[] array){
        for (T element: array){
            System.out.println(element);
        }
    }

接受通用列表的方法。

public <T> void printList(List<T> list){
      for (T element : list){
           System.out.println(element);
      }
}

答案 1 :(得分:2)

正如你所说,Java不支持通用数组创建,但这可能是因为how generic works,简而言之,泛型只在编译时有用,编译后所有泛型类都只是Object类,所以这就是为什么你不能创建通用数组。

但是,您可以创建一个空的Object数组并将其强制转换:

class Generic<B> {
    public void add(A a, int pos, B[] assoc) {
        System.out.println("Length: " + assoc.length);
    }

    public void add(A a, int pos) {
        add(a, pos, (B[]) new Object[0]);
    }
}

当我在没有该数组的情况下调用add时,它会按预期打印0。

答案 2 :(得分:2)

对于两个通用类AClass<T>BClass<T>,我可以想到一种方法:利用varargs并使用两个不同的命名函数add()和{{1} }:

addA()
相关问题