如何将Long []写入包裹?

时间:2013-04-06 12:30:36

标签: java android long-integer

我正在尝试将Long []数组写入parcel,但它只接受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 });

1 个答案:

答案 0 :(得分:2)

此:

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

有效,因为您使用的数组初始值设定项明确列出了数组元素。这些元素中的每一个都被取消装箱成为一个原始长度,因此代码既编译又成功运行,没有任何问题。如果你有一个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 class

long[] unboxedLongs = ArrayUtils.toPrimitive(boxedLongs);