イベントと小包

JavaなのでついついJFC/Swingと比較してしまうのだが、Androidのイベントは基底クラスを持たない。

public final class MotionEvent implements Parcelable {
  〜
}

代わりにParcelableという、一風変わった直列化/非直列化のためのインタフェースを実装する。

public interface Parcelable {
    public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;
    public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
    public int describeContents();
    public void writeToParcel(Parcel dest, int flags);

    public interface Creator {
        public T createFromParcel(Parcel source);
        public T[] newArray(int size);
    }
}

直列化/非直列化ということなので、writeParcelメソッドは想像できるが、であればreadParcelメソッドは何故ないのか。また、内部にインナークラスならぬインナーインタフェースがある。
createFromParcelメソッドからして、非直列化はこのインタフェースを介して行うらしいが、どうしてこんな作りになっているんだろう。

Parcelableを非直列化するには、Parcelクラスの力を借りる必要がある。どうやらその辺に秘密がありそうだ。