2

我希望制作一个通用类 Parcelable。
似乎很容易。使用元组作为一个简单的例子(只是一个例子,不要评论这个特定的类,我的一些将来自库),我可以扩展我所拥有的:

public class Pair<O1, O2> implements Serializable {
    public O1 first;
    public O2 second;
    public Pair(O1 first, O2 second){
        this.first = first;
        this.second = second;
    }
}

并做到这一点:

public class PPair<O1 extends Parcelable, O2 extends Parcelable> extends Pair<O1, O2>
        implements Serializable, Parcelable {
    public O1 first;
    public O2 second;
    public PPair(O1 first, O2 second){
        super(first, second);
    }
    // Parcelable stuff
    public PPair(Parcel in){
        super((O1)in.readParcelable(null), (O2)in.readParcelable(null));
    }
    @Override
    public int describeContents(){
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(first, flags);
        dest.writeParcelable(second, flags);
    }
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public PPair createFromParcel(Parcel in) {
            return new PPair(in); 
        }
        public PPair[] newArray(int size) {
            return new PPair[size];
        }
    };
}

但是,虽然我可以使用PPair<Uri, Uri>,但它不适用于PPair<String, String>.
有人忘记将 String 类设为 Parcelable。

扩展 String 似乎很荒谬,添加简单的 parcelability,只是为了它可以在 parcelable 泛型类中使用。
同样,如果其他人要使用我的类,删除extends Parcelablefrom 参数(并依赖instanceof内部等)似乎是个坏主意。
有没有更好的方法让该类同时接受 String 和任何 Parcelable,并且至少在与其他任何东西一起使用时发出警告?

4

0 回答 0