我可以用一种标准方法代替这种自定义方法吗?
public static Byte[] box(byte[] byteArray) {
Byte[] box = new Byte[byteArray.length];
for (int i = 0; i < box.length; i++) {
box[i] = byteArray[i];
}
return box;
}
答案 0 :(得分:24)
不,JDK中没有这样的方法。
但通常情况是,Apache Commons Lang提供such a method。
答案 1 :(得分:16)
输入Java 8,您可以执行以下操作(装箱):
int [] ints = ...
Integer[] boxedInts = IntStream.of(ints).boxed().toArray(Integer[]::new);
但是,这仅适用于int[]
,long[]
和double[]
。这不适用于byte[]
。
您也可以轻松完成反向(拆箱)
Integer [] boxedInts = ...
int [] ints = Stream.of(boxedInts).mapToInt(Integer::intValue).toArray();
答案 2 :(得分:2)
除了YoYo的答案之外,您还可以为任何原语类型执行此操作;让primArray
成为PrimType[]
类型的标识符,然后您可以执行以下操作:
BoxedType[] boxedArray = IntStream.range(0, primArray.length).mapToObj(i -> primArray[i]).toArray(BoxedType[] :: new);
答案 3 :(得分:0)
查看Apache Commons Lang源代码时,我们可以看到它只是在每个数组元素上调用Byte#valueOf(byte)
。
final Byte[] result = new Byte[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = Byte.valueOf(array[i]);
}
return result;
同时,常规的java lint工具建议不要装箱,您可以按原样分配元素。
因此,从本质上讲,您正在做与Apache Commons相同的事情。