pad*_*pad 21 java collections variadic-functions andengine
我有一个填充了元素的arrayList.我想将该数组列表的元素作为参数传递给可变参数函数.
我的功能
public SequenceEntityModifier(final IEntityModifier... pEntityModifiers)
Run Code Online (Sandbox Code Playgroud)
我的ArrayList
ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>();
arr.add(new MoveXModifier(1, 50, 120));
arr.add(new MoveXModifier(1, 120, 50));
Run Code Online (Sandbox Code Playgroud)
我想将它传递给函数,好像我会单独传递它们一样.
new SequenceEntityModifier( /* elements of arr here */ );
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
提前致谢.
Bri*_*ian 24
做就是了:
new SequenceEntityModifier(arr.toArray(new IEntityModifier[arr.size()]));
Run Code Online (Sandbox Code Playgroud)
这将复制ArrayList到给定的数组并返回它.所有vararg函数也可以为参数获取数组,因此对于:
public void doSomething(Object... objs)
Run Code Online (Sandbox Code Playgroud)
所有合法电话都是:
doSomething(); // Empty array
doSomething(obj1); // One element
doSomething(obj1, obj2); // Two elements
doSomething(new Object[] { obj1, obj2 }); // Two elements, but passed as array
Run Code Online (Sandbox Code Playgroud)
一个警告:
涉及原始数组的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);
}
Run Code Online (Sandbox Code Playgroud)
有人可能会想到这个打印1,2以及3,在不同的行.相反,它打印的东西[I@1242719c(a的默认toString结果int[]).这是因为它最终创建了Object[]一个元素,这是我们的int[],例如:
// Basically what the code above was doing
Object[] objs = new Object[] { intArray };
Run Code Online (Sandbox Code Playgroud)
同样适用于double[],char[]和其他原始数组类型.请注意,只需更改intArrayto 的类型即可解决此问题Integer[].如果您正在使用现有数组,这可能并不简单,因为您无法int[]直接转换为Integer[](请参阅此问题,我特别喜欢Apache Commons Lang中的ArrayUtils.toObject方法).
| 归档时间: |
|
| 查看次数: |
7202 次 |
| 最近记录: |