通用数组的Parcable

Parcable of generic array

我用插件生成可打包的实现,这就是我得到的代码。
我在 Metrics(Parcel in).
上有一个错误编译 可能是因为泛型数组。我该如何解决?
泛型 T 只能包含字符串、数字或布尔值。

public class Metrics<T extends Parcelable> implements Parcelable {
    private T[] yData;

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeTypedArray(this.yData, flags);
    }

    public Metrics() {
    }

    protected Metrics(Parcel in) {
        this.yData = in.createTypedArray(T.CREATOR);
    }

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

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

您可以使用 List 而不是数组 :

public class Metrics<T extends Parcelable> implements Parcelable {

    private List<T> yData;

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

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

        if (yData == null || yData.size() == 0)
            dest.writeInt(0);
        else {
            dest.writeInt(yData.size());
            final Class<?> objectsType = yData.get(0).getClass();
            dest.writeSerializable(objectsType);
            dest.writeList(yData);
        }
    }

    public Metrics() {
    }

    protected Metrics(Parcel in) {

        int size = in.readInt();
        if (size == 0) {
            yData = null;
        } else {
            Class<?> type = (Class<?>) in.readSerializable();
            yData = new ArrayList<>(size);
            in.readList(yData, type.getClassLoader());
        }
    }

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

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