作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个充满元素的arrayList。我想将该数组列表的元素作为参数传递给可变参数函数。
我的功能
public SequenceEntityModifier(final IEntityModifier... pEntityModifiers)
我的数组列表
ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>();
arr.add(new MoveXModifier(1, 50, 120));
arr.add(new MoveXModifier(1, 120, 50));
我想将它传递给函数,就好像我会单独传递它们一样。
new SequenceEntityModifier( /* elements of arr here */ );
这样的事情可能吗?
提前致谢。
最佳答案
只要做:
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
结果)。这是因为它最终会创建一个带有一个元素的 Object[]
,即我们的 int[]
,例如:
// Basically what the code above was doing
Object[] objs = new Object[] { intArray };
double[]
、char[]
和其他原始数组类型也是如此。请注意,只需将 intArray
的类型更改为 Integer[]
即可解决此问题。如果您正在使用现有数组,这可能并不简单,因为您不能将 int[]
直接转换为 Integer[]
(参见 this question,我我特别喜欢 ArrayUtils.toObject
中的 Apache Commons Lang 方法。
关于java - 如何将arrayList的元素传递给可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534531/
我是一名优秀的程序员,十分优秀!