1

我正在尝试将 Long[] 数组写入包裹,但它只接受 long[] 数组作为参数。

( Parcel 类型中的 writeLongArray(long[]) 方法不适用于参数 (Long[]) )

public class SomeClass implements Parcelable {

private Long minutes, lastUpdated;

...
...

 @Override 
 public void writeToParcel(Parcel out, int flags) {
    out.writeLongArray(new Long[] {this.minutes, this.lastUpdated });
 }

这似乎可行,但这是否允许:

     out.writeLongArray(new long[] {this.minutes, this.lastUpdated });
4

1 回答 1

2

这:

out.writeLongArray(new long[] {this.minutes, this.lastUpdated });

有效,因为您使用的是数组初始值设定项,其中明确列出了数组元素。这些元素中的每一个都被拆箱成一个原始的 long ,因此代码既可以编译又可以成功运行,这没有错。如果你有一个 Long 的集合,你可以在循环中执行转换:

long[] unboxedLongs = new long[boxedLongs.length];
for(int i = 0; i < boxedLongs.length; i++) {
    unboxedLongs[i] = boxedLongs[i].longValue();
 }

每次您想将装箱数组转换为其未装箱的等价物时,编写起来很乏味,但无法通过 SDK (afaik) 进行直接转换。不过,有第三方库可以让您编写更短的代码 - 例如使用Apache Commons Lang ArrayUtils 类

long[] unboxedLongs = ArrayUtils.toPrimitive(boxedLongs);
于 2013-04-06T12:55:19.190 回答