Android 没有 getter 和 setter 的 Parcelable 实现

Android Parcelable implemenation without getters and setters

In android developers documentation to avoid getters and setters Android Performance Pattern How create Parcelable implemented model class?

你只需要直接给变量赋值。

  private String item1;
  private String item2; 

 public ClassName(String item1, String item2) {
        this.item1 = item1;
        this.item2 = item2;
    }

    protected ClassName(Parcel in) {
        this.item1 = in.readString();
        this.item2 = in.readString();
    }

 @Override
    public int describeContents() { return 0; }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.item1);
        dest.writeString(this.item2);
    }


    public static final Creator<ClassName> CREATOR = new Creator<ClassName>() {
        @Override
        public ClassName createFromParcel(Parcel source) {return new ClassName(source);}

        @Override
        public ClassName[] newArray(int size) {return new ClassName[size];}
    };

In android developers documentation to avoid getters and setters Android Performance Pattern

不,不是。 The section on getters and setters is entitled "Avoid Internal Getters/Setters"(强调)。它指的是在 class 中使用 getters 和 setters,而不是字段访问。它并不建议通常应避免 getters 和 setters。

How create Parcelable implemented model class?

您以相同的方式创建所有 Parcelable classes

  • implements Parcelable 添加到 class 定义中
  • 实施writeToParcel()
  • 实施describeContents()
  • 添加 CREATOR static 字段

None 其中与 getter 或 setter 有任何关系。 the JavaDocs for Parcelable 中显示的 MyParcelable 示例 class 未对 mData 字段使用 getter 或 setter。

同样,使用 parcelabler.com,这里是 Parcelable 实现 Chair:

public class Chair implements Parcelable {
  private String material;
  private int numLegs;

    protected Chair(Parcel in) {
        material = in.readString();
        numLegs = in.readInt();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(material);
        dest.writeInt(numLegs);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<Chair> CREATOR = new Parcelable.Creator<Chair>() {
        @Override
        public Chair createFromParcel(Parcel in) {
            return new Chair(in);
        }

        @Override
        public Chair[] newArray(int size) {
            return new Chair[size];
        }
    };
}

它也不使用 getters 或 setters。