如何从类型变量获取ClassLoader(使用泛型对类进行分区)

Bla*_*ght 6 java generics android parcelable

我有一个带有泛型类型对象的parcelable类.通常我会读出这样的对象:

in.readParcelable(MyParcelableClass.class.getClassLoader())
Run Code Online (Sandbox Code Playgroud)

显然,我不能用泛型类型变量做到这一点..请参阅下面的代码.有人能指出我正确的方向吗?

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

  // ...
}
Run Code Online (Sandbox Code Playgroud)

Gop*_*opi 1

您可以像这样ClassLoader从泛型类型中获取T

this(in.readParcelable(parcelableTypeObject.getClass().getClassLoader()));
Run Code Online (Sandbox Code Playgroud)