Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓包裹器_Java_Android - Fatal编程技术网

Java 安卓包裹器

Java 安卓包裹器,java,android,Java,Android,根据,最好实现可打包,然后实现可序列化 然而,我的大多数实体都已经完成了,为了不实现与每个实体的接口,因为对我的所有实体来说似乎都太多了,我决定创建一个这样的可打包包装器。 但这真的更好吗?通常我会在顶部保存1,2个对象,效果很好,但这被认为是对Parcelable的错误使用,或者甚至是与Serializable相同(错误)的事情? 公共类SaveParcelable实现了Parcelable{ 私有HashMap值; 公共SaveParcelable(){ this.values=newha

根据,最好实现可打包,然后实现可序列化

然而,我的大多数实体都已经完成了,为了不实现与每个实体的接口,因为对我的所有实体来说似乎都太多了,我决定创建一个这样的可打包包装器。
但这真的更好吗?通常我会在顶部保存1,2个对象,效果很好,但这被认为是对Parcelable的错误使用,或者甚至是与Serializable相同(错误)的事情?

公共类SaveParcelable实现了Parcelable{
私有HashMap值;
公共SaveParcelable(){
this.values=newhashmap();
}
@抑制警告(“未选中”)
公共T getValue(字符串键){
if(this.values.containsKey(键))
返回(T)this.values.get(key);
其他的
返回null;
}
public void setValue(字符串键、对象值){
this.values.put(键,值);
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
}
}

这会增加运行时开销,而且似乎不会为您保存任何编码。您仍然需要重写
writeToParcel()
,实现
CREATOR
,并编写合适的构造函数。。。这就是您首先要实现的
Parcelable
。是的,也许它为您保存了
describeContents()
,但这只是样板。既然这样做没有帮助,而且会增加开销,你为什么还要为此烦恼呢?看来这有点不对劲。我不需要实现
writeToParcel()
describeContents()
。我使用该类将对象保存为
onSaveInstanceState()
中的状态,并且可以正常工作。
public class SaveParcelable implements Parcelable {
    private HashMap<String, Object> values;

    public SaveParcelable() {
        this.values = new HashMap<String, Object>();
    }

    @SuppressWarnings("unchecked")
    public <T> T getValue(String key) {
        if (this.values.containsKey(key))
            return (T) this.values.get(key);
        else
            return null;
    }

    public void setValue(String key, Object value) {
        this.values.put(key, value);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
    }
}