4

问题留在这里是因为人们回答了这个问题,我的问题是我使用的 API 版本与我拥有的文档不同步......事实上你可以这样做。

有没有办法在Java中使用二维数组作为需要数组可变参数的参数的参数?

我试图调用的函数是

public Long sadd(final byte[] key, final byte[]... members) {

我有一个二维字节数组(byte [][] data=blah)

但是,如果我尝试打电话

sadd(key,data);

我收到以下编译器错误:

(实参byte[][]无法通过方法调用转换为byte[])

有没有办法将二维数组用作数组类型的可变参数?

4

4 回答 4

6

以下对我有用。也许你没有做你认为你在做的事?

@Test
public void test_varargs() {
   byte[] x = new byte[] { 1, 2, 3};
   byte[] y = new byte[] { 0, 1, 2};
   assertEquals(9L, sum(x,y));
   byte[][] z = new byte[][] { x,y };
   assertEquals(9L, sum(z));
}

public long sum(final byte[]... members) {
   long sum = 0;
   for (byte[] member : members) {
       for (byte x : member) {
         sum += x;
      }
   }
   return sum;
}
于 2012-08-29T10:43:46.813 回答
2

您能否提供更多代码,因为这可以为我编译。

byte[][] data = new byte[1][];
byte[] key = new byte[1];

long sadd = sadd(key, data);
于 2012-08-29T10:18:32.487 回答
1
class A {
    void show(int[] ax,int[]...arr) {
        for (int is : ax) {
            System.out.println(is);
        }
        for (int[] a : arr) {
            for (int i : a) {
                System.out.println(i);
            }
        }
    }
}
public class abc{
    public static void main(String[] args) {
        A a = new A();
        int[] arr1= new int[]{10,20};
        int[][] arr2 = new int[][] { { 10, 20 }, { 20, 20 }, { 30, 20 } };
        a.show(arr1,arr2);  
    }
}

在这里,我使用二维数组作为 var args 参数和一维数组作为固定参数。如果这可以帮助您,请参考此代码!:)

于 2014-07-25T10:23:16.890 回答
0

这是不可能的,因为编译器无法推断出这两个维度。使用一维数组时,您可以将数组的长度确定为辅助参数的数量(那些不是强制性的)。

例如:假设您的方法定义包括n强制参数,并且在运行时提供m更多参数。这些m参数将组成辅助参数数组。长度为m。在二维数组的情况下,编译器必须为数组提供两个维度,例如:dimension1 * dimension2 = m.

于 2012-08-29T10:26:13.887 回答