Java 如何将数组列表的元素传递给变量函数

Java 如何将数组列表的元素传递给变量函数,java,collections,andengine,variadic-functions,Java,Collections,Andengine,Variadic Functions,我有一个装满元素的数组列表。我想把数组列表中的元素作为参数传递给一个变量函数 我的职能 public SequenceEntityModifier(final IEntityModifier... pEntityModifiers) 我的ArrayList ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>(); arr.add(new MoveXModifier(1, 50, 120)); a

我有一个装满元素的数组列表。我想把数组列表中的元素作为参数传递给一个变量函数

我的职能

public SequenceEntityModifier(final IEntityModifier... pEntityModifiers)
我的ArrayList

ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>();
arr.add(new MoveXModifier(1, 50, 120));
arr.add(new MoveXModifier(1, 120, 50));
这样的事情可能吗

提前谢谢。

只要做:

new SequenceEntityModifier(arr.toArray(new IEntityModifier[arr.size()]));
这会将
ArrayList
复制到给定数组并返回它。所有vararg函数也可以将数组作为参数,因此:

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
。相反,它打印类似于
[I@1242719c
(一个
int[]
的默认
toString
结果)。这是因为它最终创建了一个
对象[]
,其中包含一个元素,即我们的
int[]
,例如:

// Basically what the code above was doing
Object[] objs = new Object[] { intArray };

double[]
char[]
和其他基本数组类型也是如此。请注意,只需将
intArray
的类型更改为
Integer[]
,即可解决此问题。如果使用现有数组,这可能并不简单,因为无法将
int[]
直接转换为
Integer[]
(请参阅,我特别喜欢中的方法)。

构造
IEntityModifier…
IEntityModifier[]的语法糖。


请参阅(8.4.1形式参数)

我始终创建一个重载,该重载使用
Iterable<?extensed IEntityModifier>
,并使用
数组将变量版本转发到此版本。asList()
,这很便宜。

正确,ofc,但每次我写这样的东西时,我都会感到畏缩-这样的语法纠结。@SteveB.我同意,重载比强制执行这种方法调用,然后在幕后转换要好得多。虽然varargs很好,但它们不能很好地处理集合。不仅仅是纠结;性能受到影响所有不必要的(指针)复制。请参阅下面我的答案以获得更便宜的方法。
// Basically what the code above was doing
Object[] objs = new Object[] { intArray };