我正在尝试将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 });
答案 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);