2013-03-19 85 views
6

鉴于变量:如何使一个变量方法将单个数组作为可变参数数组的第一个值?

Object[] ab = new Object[] { "a", "b" }; 
Object[] cd = new Object[] { "c", "d" }; 

当调用下面的方法:

public static void m(Object... objects) { 
    System.out.println(Arrays.asList(objects)); 
} 

使用:

m(ab, cd); 

我得到预期的输出:

[[Ljava.lang.Object;@3e25a5, [Ljava.lang.Object;@19821f] 

但在使用时:

m(ab); 

我得到:

[a, b] 

由于strings <- ab而不是strings[0] <- ab

我怎样才能编译器采取ab阵列作为strings阵列的第一个值,然后将具有输出:

[Ljava.lang.Object;@3e25a5 

?同时通过

+0

接受'Object []'并将它传递给'm'的重载可能是一个解决方法。 – 2013-03-19 09:11:43

+1

@defaultlocale您不能在字节码级别表示这样的重载,因为它会导致重复的签名。 – 2013-03-19 09:37:19

+0

@MarkoTopolnik感谢您指出了这一点。手工没有编译器,因此是一个愚蠢的评论。 – 2013-03-19 09:52:10

回答

9

类型转换它,你会得到你想要的东西 -

m((Object)ab); 
+1

太棒了,很好的建议。 – bsiamionau 2013-03-19 09:14:09

3
从@Sudhansu的建议

分开。你可以像下面那样定义变量,所以当传递单个数组时,你不必在方法调用中进行强制转换。

Object ab = new Object[] { "a", "b" }; 
Object cd = new Object[] { "c", "d" }; 
相关问题