2012-08-31 4 views
42

私はList<Thing>を持っています。それはdoIt(final Thing... things)と宣言されたメソッドに渡したいと思います。それを行う方法はありますか?varargsとしてリストを渡す

public doIt(final Thing... things) 
{ 
    // things get done here 
} 

List<Thing> things = /* initialized with all my things */; 

doIt(things); 

doIt()ThingないList<Thing>がかかるため、コードは明らかに機能しないこと:

コードは次のようなものに見えます。

リストをvarargsとして渡す方法はありますか?

これは、Androidアプリの中ですが、解決策は何もJavaへ

答えて

77

を適用しない理由私は見ていないだけでthings.toArray(new Thing[things.size()])を渡します。

+7

これは 'things.toArray(new Thing [things.size()]);'である必要があります。 – Gray

+2

それはやるよ。 (そして、@Grayは正しいです、適切なサイズの配列を渡すのがもう少し効率的です) – xbakesx

+0

@Gray:どちらも正しいです – newacct

1

variadic引数は、内部的に配列として解釈されます。だからあなたはそれを前の配列に変換するべきです。また、doItメソッドでは、配列インデックスを使用してthings要素にアクセスする必要があります。

+0

迅速な対応をありがとう。それは素晴らしい作品です。配列のインデックスで要素にアクセスすることに言及した理由はありますか、それ以上のことはできますか? doIt()内に(ないとは)理由がありません。 – xbakesx

+0

私はあなたの答えとSLaksの答えが正しいとマークすることはできませんので、あなたは彼の答えを編集して、働く理由を加えるべきだと思います。それから私は正しい答えにします。申し訳ありませんが、人々は答えのコードを見るのが好きです。 – xbakesx

+0

@xbakesx for-eachを使うことはできません。 – Brian

関連する問題