2012-07-04 14 views

答えて

20

{ myObject }の構文はspecial syntactic sugarなので、配列変数を初期化するときにのみ適用されます。これは、それ自身でタイプ情報が欠けているためです。特殊な代入の場合、型は変数から完全に推測されます。

最初の例では、コンパイラはaObject[])に割り当てていることを認識しているため、この構文は許可されています。後者では、変数を初期化していません(Javaの型推論の弱点のため、パラメータ割り当てのコンテキストも完全には機能しません)。したがって、たとえたとえブロックを宣言するのではなく、あなたがしようとしていることを明白に判断できたとしても、配列の型を知ることはできません。変数を使用せずにインプレース配列を定義したい場合に働くだろう

someMethod (new Object[] { myObject }) 

を呼び出す


尋ねたとして、あなたの質問上記の答えが、私はあなたが呼んでいる方法ではなく、明示的に配列PARAMTERを要求するのではなくvarargsであることに気づきます。したがって、この場合は単に電話することができます

someMethod(myObject); 
+0

長すぎることはありません。 +1 –

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

このトリックを行う必要があります!