2012-07-04 151 views

回答

20

因爲{ myObject }語法是special syntactic sugar只適用於初始化數組變量。這是因爲它自己的任務缺乏類型信息;但是在賦值的特殊情況下,類型是從變量中完全推斷出來的。

在第一個示例中,編譯器知道您正在分配給a(這是一個Object[]),因此該語法是允許的。在後者中,你不是初始化一個變量(並且由於Java類型推斷的弱點,它甚至不能完全解決參數賦值的上下文)。所以它不知道數組應該是什麼類型,即使它可以毫不含糊地確定這就是你想要做的(而不是像聲明一個塊)。

調用

someMethod (new Object[] { myObject }) 

會工作,如果你想定義就地陣列,而無需使用一個變量。


雖然上述回答得問你的問題,我注意到你正在調用方法是varargs而非明確要求數組參數中。因此,在這種情況下,您可以簡單地致電

someMethod(myObject); 
+0

尼斯,明確,不過長,完成工作。 +1 –

6
someMethod(new Object[] { "" }); 

應該訣竅!

相關問題