Android 泛型数组的可分块性

Android 泛型数组的可分块性,android,generics,parcelable,Android,Generics,Parcelable,我使用插件生成parcelable实现,这就是我得到的代码。 我在编译度量(包裹中)时出错 这可能是因为泛型数组。我怎样才能修好它? 泛型T只能包含字符串、数字或布尔值 public class Metrics<T extends Parcelable> implements Parcelable { private T[] yData; @Override public int describeContents() { return 0;

我使用插件生成parcelable实现,这就是我得到的代码。
我在编译
度量(包裹中)
时出错
这可能是因为泛型数组。我怎样才能修好它?
泛型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];
        }
    };
}
公共类度量实现了可打包{
私人T[]yData;
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writetypedaray(this.yData,flags);
}
公共度量(){
}
受保护的度量(包裹中){
this.yData=in.createTypedArray(T.CREATOR);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共度量createFromParcel(地块源){
返回新的度量(源);
}
@凌驾
公共度量[]新数组(整数大小){
返回新的度量值[大小];
}
};
}

您可以使用
列表而不是数组:

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];
        }
    };
}
公共类度量实现了可打包{
私有列表数据;
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
if(yData==null | | yData.size()==0)
目的写入(0);
否则{
dest.writeInt(yData.size());
最终类objectsType=yData.get(0.getClass();
目标可写变量(objectsType);
目的写入列表(yData);
}
}
公共度量(){
}
受保护的度量(包裹中){
int size=in.readInt();
如果(大小==0){
yData=null;
}否则{
.readSerializable()中的类类型=(类);
yData=新阵列列表(大小);
in.readList(yData,键入.getClassLoader());
}
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共度量createFromParcel(地块源){
返回新的度量(源);
}
@凌驾
公共度量[]新数组(整数大小){
返回新的度量值[大小];
}
};
}

您可以使用
列表而不是数组:

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];
        }
    };
}
公共类度量实现了可打包{
私有列表数据;
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
if(yData==null | | yData.size()==0)
目的写入(0);
否则{
dest.writeInt(yData.size());
最终类objectsType=yData.get(0.getClass();
目标可写变量(objectsType);
目的写入列表(yData);
}
}
公共度量(){
}
受保护的度量(包裹中){
int size=in.readInt();
如果(大小==0){
yData=null;
}否则{
.readSerializable()中的类类型=(类);
yData=新阵列列表(大小);
in.readList(yData,键入.getClassLoader());
}
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共度量createFromParcel(地块源){
返回新的度量(源);
}
@凌驾
公共度量[]新数组(整数大小){
返回新的度量值[大小];
}
};
}

我知道,但我想要阵列。是否可以使用数组?或者唯一的方法是列表?我知道,但我想要数组。是否可以使用数组?或者唯一的办法就是列出清单?