android – 自动值 – 包裹 – 适配器可以应对另一个自动值类的Typed Set吗?

我正在调查自动值和它的扩展,即我的 Android应用程序中的auto-value-parcel和auto-value-parcel-adapter.

我有这些模型类: –

@Autovalue
public abstract class Xenarchaeota implements Parcelable {

    @ParcelAdapter(AmoebaTypeAdapter.class)
    public abstract Set<Amoeba> amoebas();

    public static Builder builder() {
        return new Autovalue_Xenarchaeota.Builder();
    }

    @Autovalue.Builder
    public abstract static class Builder {

        public abstract Builder setAmoebas(Set<Amoeba> value);

        public abstract Xenarchaeota build();
    }
}

@Autovalue
public abstract class Amoeba implements Parcelable {

    public abstract String surname();

    public static Builder builder() {
        return new Autovalue_Amoeba.Builder();
    }

    @Autovalue.Builder
    public abstract static class Builder {

        public abstract Builder surname(final String value);

        public abstract Amoeba build();
    }

}

我的类型适配器是我的问题出现的地方

class AmoebaTypeAdapter implements TypeAdapter<Set<Amoeba>> {

    @Override
    public Set<Amoeba> fromParcel(Parcel in) {
        final ArrayList<Amoeba> arrayList = new ArrayList<>();
        in.readTypedList(arrayList,Amoeba.CREATOR); // How to access the CREATOR?
        return new TreeSet<>(arrayList);
    }

    @Override
    public void toParcel(Set<Amoeba> value,Parcel dest) {
        final ArrayList<Amoeba> arrayList = new ArrayList<>(value);
        dest.writeTypedList(arrayList);
    }
}

我需要传递给readTypedArray的CREATOR在Autovalue_Amoeba中声明.

我的错误在哪里?对自动价值包裹的误解?

解决方法

Autovalue:Parcel扩展无法处理集合,但如果将属性转换为List,则无需自定义适配器即可开箱即用.如果你想把它当成一个集合你就可以做到这一点.请记住,您可能还想缓存Set.
@Autovalue
public abstract class Xenarchaeota implements Parcelable {

    abstract List<Amoeba> amoebaList();
    public Set<Amoeba> amoebas() {
        return new TreeSet(amoebaList());
    }

    public static Builder builder() {
        return new Autovalue_Xenarchaeota.Builder();
    }

    @Autovalue.Builder
    public abstract static class Builder {

        public abstract Builder setAmoebas(Set<Amoeba> value);

        public abstract Xenarchaeota build();
    }
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...