这是通过 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());
}
我有一个 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
。鉴于 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());
}