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

Смежные вопросы