2012-08-31 30 views
42

我有一個List<Thing>,我想將它傳遞給一個方法聲明doIt(final Thing... things)。有沒有辦法做到這一點?傳遞一個列表作爲可變參數

代碼看起來東西這樣的:

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

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

doIt(things); 

該代碼顯然是行不通的,因爲doIt()需要ThingList<Thing>

有沒有辦法在List中傳遞可變參數?

這是一個Android應用程序,但我不明白爲什麼該解決方案將不適用於任何Java的

回答

77

只是傳遞things.toArray(new Thing[things.size()])

+7

它應該是'things.toArray(new Thing [things.size()]);'。 – Gray

+2

這樣做。 (是的@Gray是正確的,它是一個更高效的傳遞適當大小的數組。) – xbakesx

+0

@Gray:都是正確的 – newacct

1

可變參數在內部解釋爲數組。所以你應該先把它轉換成一個數組。同樣在你的doIt方法中,你應該使用數組索引來訪問東西的元素。

+0

感謝您的快速響應。這很好。是否有你提到通過數組索引訪問元素的原因,還是你能*做到這一點?在doIt()裏面沒有理由不要(爲什麼):對吧? – xbakesx

+0

我不能將你的答案和SLaks答案都標記爲正確的,所以我認爲你應該編輯他的答案,並添加有效的原因。然後我會做出正確的答案。對不起,人們喜歡在答案中看到代碼。 – xbakesx

+0

@xbakesx沒有理由不能使用for-each。 – Brian