Java 将对象成员写入地块

Java 将对象成员写入地块,java,android,serialization,parcelable,parcel,Java,Android,Serialization,Parcelable,Parcel,到目前为止,我一直在毫无疑问地使用Parcelable对象,主要是因为它们的所有成员都是具有与其关联的writeX()方法的类型。例如,我: public String name; private Foo(final Parcel in) { name = in.readString(); } public void writeToParcel(final Parcel dest, final int flags) { dest.writeString(name); } 但是

到目前为止,我一直在毫无疑问地使用
Parcelable
对象,主要是因为它们的所有成员都是具有与其关联的
writeX()
方法的类型。例如,我:

public String name;

private Foo(final Parcel in) {
    name = in.readString(); }
public void writeToParcel(final Parcel dest, final int flags) {
    dest.writeString(name); }
但是现在,如果我有一个
会员,事情对我来说就有点危险了:

public Bar bar;

private Foo(final Parcel in) {
    bar = new Bar(); //or i could actually write some constructor for Bar, this is a demo.
    bar.memberString = in.readString();
}

public void writeToParcel(final Parcel dest, final int flags) {
    // What do I do here?
}

我是不是走错了路?在我的
writeToParcel
中,我应该怎么做才能将包裹
写入包裹成员
Bar
s?

正确且更面向对象的方法是使Bar工具也可以包裹

要在您的私有Foo构造函数中读取Bar,请执行以下操作:

private Foo(final Parcel in) {
  ... ...
  bar = in.readParcelable(getClass().getClassLoader());
  ... ...
}
要在writeToParcel方法中写入条,请执行以下操作:

public void writeToParcel(final Parcel dest, final int flags) {
  ... ...
  dest.writeParcelable(bar, flags);
  ... ...
}

希望这能有所帮助。

包裹是一种痛苦,只能传递价值,不能引用。我永远不会推荐使用它们。如果应用程序需要静态模型实例,只需获取所需对象的垫片引用。

使用单例作为设计原则在面向对象编程中是有缺陷的。反序列化为json或存储值,不要拥有所有其他类都可以访问的全局类。添加是因为有些类可能会在此处混淆getClass()。getClassLoader()表示Bar.class.getClassLoader()如果我的类由SDK提供且无法修改,我该怎么办?