问题留在这里,因为有人回答,我的问题是我使用的API版本与我的文档不同步......实际上你可以这样做。
有没有办法在Java中使用2-d数组作为需要数组变量的参数的参数?
我试图调用的函数是
public Long sadd(final byte[] key, final byte[]... members) {
我有一个2-d字节数组(byte [] [] data = blah)
但是如果我试着打电话
sadd(key,data);
我收到以下编译错误:
(实际参数byte [] []不能通过方法调用转换转换为byte [])
有没有办法使用二维数组作为数组类型的变量?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
你能提供更多的代码,因为这会为我编译。
byte[][] data = new byte[1][];
byte[] key = new byte[1];
long sadd = sadd(key, data);
答案 2 :(得分: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);
}
}
这里我使用2-d数组作为var args参数,使用1-d数组作为固定参数。如果这可以帮助您,请参考此代码! :)
答案 3 :(得分:0)
由于编译器无法推断出两个维度,因此无法实现。使用一维数组时,您可以将数组的长度确定为辅助参数的数量(不是必需的)。
例如:假设您的方法定义包含n
必需参数,并且在运行时,您提供m
个参数。那些m
参数将组成辅助参数数组。长度为m
。对于二维数组,编译器必须为数组提供两个维度:dimension1 * dimension2 = m
。