2016-07-14 4 views
1

私はプラグインでパーセル可能な実装を生成します。
Metrics(Parcel in)にエラーコンパイルがあります。
これはおそらくジェネリックアレイのためです。どうすれば修正できますか?
ジェネリックTは、String、Numberまたはbooleanのみを含むことができます。汎用配列のParcable

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]; 
     } 
    }; 
} 

答えて

0

あなたは、配列の代わりに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]; 
     } 
    }; 
} 
+0

を私は知っているが、私は、配列をしたいと思います。配列で可能ですか?または唯一の方法はリストですか? – motis10