Parceler使用继承泛型类型

时间:2016-02-17 13:43:04

标签: android parceler

我正在努力寻找在特定情况下使用parceler库的方法。

有一个带泛型类型的抽象类,比如这个

public abstract class ParentClass<O> {

    private String id;
    private O options;

    public String getId() {
        return id;
    }

    public void setId(String id) {
       this.id = id;
    }

    public O getOptions() {
        return options;
    }

    public void setOptions(O options) {
        this.options = options;
    }

}

另一个我们将用作选项的类(我们将序列化)......

@Parcel(Parcel.Serialization.BEAN)
public class MyOptions {

    private boolean option1;

    public boolean getOption1() {
        return option1;
    }

    public void setOption1(boolean option1) {
        this.option1 = option1;
    }
}

我们要序列化的第三个类叫做ChildClass

@Parcel(Parcel.Serialization.BEAN)
public class ChildClass extends ParentClass<MyOptions>{}

尽管我没有序列化ParentClass,只是ChildClass,但是当我尝试构建项目时出现编译器错误

Parceler: Unable to find read/write generator for type java.lang.Object for ParentClass#options
    public void setOptions(O options) {

我知道文档声明“如果未映射泛型参数,Parcel会出错。”但在这种情况下,我只对序列化ChildClass同时保留ParentClass的属性(即id和实例)感兴趣MyOptions类)。有可能使它成为可能吗?试图遵循一些建议here,但没有成功。

1 个答案:

答案 0 :(得分:1)

不是最佳选择,但您可以通过覆盖基类中的getOptions()setOptions()方法来解决此问题。这指定了Parceler的类型:

@Parcel(Parcel.Serialization.BEAN)
public class ChildClass extends ParentClass<MyOptions>{

    @Override
    public MyOptions getOptions() {
        return super.getOptions();
    }

    @Override
    public void setOptions(MyOptions options) {
        super.setOptions(options);
    }
}

我想我们可以确定这种暗示类型,但目前这是最接近的解决方案。