我希望制作一个通用类 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 Parcelable
from 参数(并依赖instanceof
内部等)似乎是个坏主意。
有没有更好的方法让该类同时接受 String 和任何 Parcelable,并且至少在与其他任何东西一起使用时发出警告?