只要做到:
new SequenceEntityModifier(arr.toArray(new IEntityModifier[arr.size()]));
這將複製ArrayList
給定數組中,並返回。所有的可變參數的功能也可以採取陣列的說法,所以:
public void doSomething(Object... objs)
所有法律電話是:
doSomething(); // Empty array
doSomething(obj1); // One element
doSomething(obj1, obj2); // Two elements
doSomething(new Object[] { obj1, obj2 }); // Two elements, but passed as array
警告:
VARARG呼籲涉及基本數組別不會像你期望的那樣工作。例如:
public static void doSomething(Object... objs) {
for (Object obj : objs) {
System.out.println(obj);
}
}
public static void main(String[] args) {
int[] intArray = {1, 2, 3};
doSomething(intArray);
}
人們可能期望這個打印1
,2
和3
,在不同的行。相反,它會輸出類似[[email protected]
(int[]
的默認toString
結果)。這是因爲它最終與一個元素,這是我們int[]
,例如:
// Basically what the code above was doing
Object[] objs = new Object[] { intArray };
也是一樣double[]
,char[]
,等原始數組類型創建Object[]
。請注意,只需將intArray
的類型更改爲Integer[]
即可解決此問題。這可能並不簡單,因爲您無法直接將int[]
投射到Integer[]
(請參閱this question,我特別喜歡Apache Commons Lang的ArrayUtils.toObject
方法),因此如果您正在使用現有陣列,這可能並不簡單。
正確,ofc,但每次我寫這樣的東西我都畏縮 - 這種句法糾結。 –
完美,非常感謝! – pad
@SteveB。我同意,重載是比強制這種方法調用更好的選擇,然後在幕後轉換。雖然可變參數很好,但它們在收藏方面表現不佳。 – Brian