我处在一个我必须在具有自定义字段的类上实现Parcelable接口的位置,该字段可以是Shape类的任何子类:
class MyClass implements Parcelable
{
Shape shape;
}
现在,如果我想将形状字段写入包裹,这很容易:
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeParcelable(shape, flags);
}
这没关系,因为Shape对象可以是任何扩展Shape的对象,它会正确写入。
但是当我从parcel读取对象时,我必须传递实例类的ClassLoader,但此时我不知道实际的实例应该是什么。对于Shape,它可以是三角形,正方形或圆形。
@Override
public MyClass createFromParcel(Parcel source)
{
MyClass o = new Myclass();
o.shape = source.readParcelable(Shape.class); // ???
return o;
}
我目前的解决方法是使用Serializable来编写此对象,但效率非常低。 解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
据我所知,当您阅读Shape.class
时,可以使用Parcelable
,因为它会返回SubClass
的实例,其效果正常 您的Shape
子类自行实施Parcelable
方法writeToParcel()
,并拥有自己的CREATOR
个变量。子类不能依赖CREATOR
的{{1}}。