はい、できます。サブクラス オブジェクトの構築中にクラス名またはクラス ローダーを保存するだけで、パーセルブルの読み取り/書き込み操作中にそれを渡すことができます。
ステップバイステップの説明:
ステップ1。Generic クラスから拡張されたクラス名を次のように保存します。
public abstract class GenericClass<T> implements Parcelable {
private String className;
ステップ 2。ジェネリック クラスから拡張されるすべてのクラスは、次のように構築中にクラス名を指定する必要があります。
public class MyClass extends GenericClass<MyClass> {
public MyClass () {
super();
setClassName(MyClass.class.getName()); // Generic class setter method
}
ステップ 3。汎用クラスでは、次のようにクラス名を getClassLoader() に読み書きできます。
public abstract class GenericClass<T> implements Parcelable {
private String className;
T myGenericObject;
protected MyClass (Parcel in) {
super(in);
this.className = in.readString();
ClassLoader classLoader;
try {
classLoader = Class.forName(this.className).getClassLoader();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
myGenericObject = in.readParcelable(classLoader);
//... Other class members can go here
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(className);
//... Other class members can go here
}
}