这是通过 Parcelable 传递 Period class 的正确方法吗

Is this the right way to pass a Period class through a Parcelable

我有一个 class 实现了 Parcelable,但它只有原始类型作为成员。

到目前为止,我在两个活动之间毫无问题地将此 class 的实例作为 Parcelable 传递。

但我要添加一个类型为句点 (java.time) 的成员。

在 Internet 上进行研究时,我发现传递实现可打包的 class 的成员对象(不可打包),我实际上应该通过该对象的字段(原始类型或字符串)传递parcelable 而不是整个对象(因为它没有实现 parcelable)

查看文档,Period class 没有实现 Parcelable。

那么,这是通过 Parcelable 传递它的正确方法吗?

Period objPeriod;

public void writeToParcel(Parcel out, int flags){
    out.writeString(objPeriod.toString());
}

private MyClass(Parcel in){
    objParcel.parse(in.readString());
}

Period实现了Serializable,所以你可以这样写。

public void writeToParcel(Parcel out, int flags) {
  out.writeSerializable(objPeriod);
}

private MyClass(Parcel in) {
  objPeriod = (Period) in.readSerializable();
}

但是,如果可能,最好避免Serializable。鉴于 的 Javadoc 确实定义了一个结构化的 toString() 实现,然后可以对其进行解析:

Outputs this period as a String, such as P6Y3M1D.

那我觉得你原来的建议应该是完全可以接受的,使用静态Period.parse()方法:

Obtains a Period from a text string such as PnYnMnD.

This will parse the string produced by toString() which is based on the ISO-8601 period formats PnYnMnD and PnW.

public void writeToParcel(Parcel out, int flags) {
  out.writeString(objPeriod.toString());
}

private MyClass(Parcel in) {
  objPeriod = Period.parse(in.readString());
}