可分配的循环依赖

时间:2016-02-02 17:21:21

标签: java android parcelable

  • 你有A类实现Parcelable并且包含类{B类的List个对象。

  • 实现Pracelable并包含A类字段的B类。

我为每个人实现了Parcelable方法,我获得了Parcelable的write方法的堆栈溢出,这些方法接缝正常,因为每个类都在循环中调用另一个。

有没有办法避免这种情况?

用户类:

public class User implements Parcelable {
private String mName;
private List<Collection> mCollections;
...
@Override
public void writeToParcel(Parcel out, int flags) {
    out.writeString(mName);
    out.writeList(mCollections);          // Line 76
}
...

集合类

@Override
public void writeToParcel(Parcel out, int flags) {

    out.writeString(mTitle);
    out.writeInt(mCounter);
    out.writeSerializable(mDateRecieved);
    out.writeParcelable(mUser, flags);      //Line 205

堆栈追踪:

02-02 17:44:07.807 5113-5113/com.example.crysis473.cm E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    java.lang.StackOverflowError
                                                                        at android.os.Parcel.writeString(Parcel.java:513)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1249)
                                                                        at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1254)
                                                                        at android.os.Parcel.writeValue(Parcel.java:1173)
                                                                        at android.os.Parcel.writeList(Parcel.java:622)
                                                                        at com.example.crysis473.cm.User.writeToParcel(User.java:76)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1254)
                                                                        at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1254)
                                                                        at android.os.Parcel.writeValue(Parcel.java:1173)
                                                                        at android.os.Parcel.writeList(Parcel.java:622)
                                                                        at com.example.crysis473.cm.User.writeToParcel(User.java:76)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1254)
                                                                        at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
                                                                        at android.os.Parcel.writeParcelable(Parcel.java:1254)
   ..........

0 个答案:

没有答案