コード:Javaメソッドのパラメータとして配列を渡す方法は?
Object[] a={ myObject};
someMethod(Object ...arg);
私は試してみてください。
someMethod ({myObject});
私はEclipseでエラーが発生します。
しかし:
someMethod (a);
すべてOK。 なぜこの違いがありますか?おかげさまで
コード:Javaメソッドのパラメータとして配列を渡す方法は?
Object[] a={ myObject};
someMethod(Object ...arg);
私は試してみてください。
someMethod ({myObject});
私はEclipseでエラーが発生します。
しかし:
someMethod (a);
すべてOK。 なぜこの違いがありますか?おかげさまで
{ myObject }
の構文はspecial syntactic sugarなので、配列変数を初期化するときにのみ適用されます。これは、それ自身でタイプ情報が欠けているためです。特殊な代入の場合、型は変数から完全に推測されます。
最初の例では、コンパイラはa
(Object[]
)に割り当てていることを認識しているため、この構文は許可されています。後者では、変数を初期化していません(Javaの型推論の弱点のため、パラメータ割り当てのコンテキストも完全には機能しません)。したがって、たとえたとえブロックを宣言するのではなく、あなたがしようとしていることを明白に判断できたとしても、配列の型を知ることはできません。変数を使用せずにインプレース配列を定義したい場合に働くだろう
someMethod (new Object[] { myObject })
を呼び出す
。
尋ねたとして、あなたの質問上記の答えが、私はあなたが呼んでいる方法ではなく、明示的に配列PARAMTERを要求するのではなくvarargsであることに気づきます。したがって、この場合は単に電話することができます
someMethod(myObject);
someMethod(new Object[] { "" });
このトリックを行う必要があります!
長すぎることはありません。 +1 –