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

Jak*_*ter 4 java

我的问题很简单:

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

public void add(A elem, int pos, B[] assoc)
Run Code Online (Sandbox Code Playgroud)

我想做的是创建一个方法

public void add(A elem, int pos)
Run Code Online (Sandbox Code Playgroud)

它用assoc中的空Array调用upper方法。到目前为止,我没有找到解决方案,因为Java不允许实例化泛型类型的数组。

Lok*_*gal 6

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

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

接受通用列表的方法。

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


kaj*_*acx 2

正如你所说,Java不支持泛型数组的创建,但这可能是因为泛型的工作原理,简而言之,泛型仅在编译时才重要,编译后所有泛型类都只是对象类,所以这就是为什么你不能创建泛型数组。

但是,您可以创建一个空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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

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