我有一个带泛型类型对象的parcelable类。通常我会读出这样的对象:如何从类型变量中获取ClassLoader(用于使用泛型来分类)
in.readParcelable(MyParcelableClass.class.getClassLoader())
显然我不能这样做与泛型类型变量..看到下面的代码。任何人都可以将我指向正确的方向吗?
public class ParcelableOverlayItem<T extends Parcelable> extends OverlayItem implements Parcelable {
private T parcelableTypeObject;
protected ParcelableOverlayItem(Parcel in) {
this(in.readParcelable(T.class.getClassLoader())); // this is not working: "Cannot select from a type variable"
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(parcelableTypeObject, flags);
}
public ParcelableOverlayItem(T parcelableTypeObject) {
super();
this.parcelableTypeObject = parcelableTypeObject;
}
public T getParcelableTypeObject() {
return parcelableTypeObject;
}
// ...
}
应该ParcelableOverlayItem –
我其实已经纠正了,我还是谢谢你感激不尽! – Blacklight
解决方法是在'ParcelableOverlayItem'的构造函数中接收'T'的类型,并在'T'之前将它存储在Parcel中。然后在阅读时你可以做'this(in.readParcelable(typeOfT.class.getClassLoader()));'。 [检查源代码在这里](https://stackoverflow.com/a/28069422/3715151)。 – Daniel