我想将此泛型类转换为可打包对象,但是我对问题的概念并不十分清楚。

类:

public class Type<T> implements Parcelable {

    // T stands for "Type"
    private T t;

    public void set(T t) { this.t = t; }

    public T get() { return t; }

}


这就是我尝试过的。但我知道这是不正确的,或者可能是不完整的。

public class Type<T> implements Parcelable {

    // T stands for "Type"
    private T t;

    protected Type(Parcel in) {
    }

    public void set(T t) { this.t = t; }

    public T get() { return t; }

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

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

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

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

}

最佳答案

这与vikas kumar类似,但要保证只能将Parcelable作为T参数传递,这样可以避免出现异常。

public class Type<T extends Parcelable> implements Parcelable {
    private T t;

    protected Type(Parcel in) {
        t = (T) in.readValue(t.getClass().getClassLoader());
    }

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

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

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeValue(t);
    }
}

08-25 14:41