对Serializable的内部工作感到困惑

时间:2015-08-19 07:35:09

标签: java android serialization

我有一个实现Den界面的课程Serializable

public class Den implements Serializable {

    private double id;
    private String name;

    public Den(double id, String name){
        this.id = id;
        this.name = name;
    }

    public double getId() {
        return id;
    }

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

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我可以像Den一样发送Intent个实例:

Intent intent = new Intent(context, NewActivity.class);
intent.putExtra("OBJECT_KEY", new Den(20.2, "JOHN"));
startActivity(intent);

然后在另一个Activity中接收它:

Intent intent = getIntent();
Den den = (Den) intent.getSerializableExtra("OBJECT_KEY");

现在我的问题是:为什么我需要在Serializable上实现Den接口,而不是intfloat或{{1}等原始数据类型}}?内部发生了什么?

4 个答案:

答案 0 :(得分:2)

  

为什么我需要在Den上实现Serializable接口,但不是   原始数据类型,如int,float或String?

String是Serializable而不是基本类型。

原始类型无法实现接口。

在序列化对象时,JVM会处理具有基本类型的字段。

答案 1 :(得分:0)

原始类型已经可序列化

在您自己的类型中,请考虑比Serializable

更好地实现Parcelable interface

Android Studio有一些插件可以很容易地实现,结果是更好的性能

答案 2 :(得分:0)

Intent类已经使您能够通过putExtra()在活动之间传递各种数据类型(大多数是原始的)。因此,您只需要在自定义对象上实现Serializable

也像Alberto建议的那样,实施Parcelable更好的做法是因为它特定于Android平台并且可能更加优化。检查这两者之间的更多信息,link

答案 3 :(得分:-1)

Becasuse Serializable将您的所有数据设为Object,以便转移。 如果您的数据项非常大,则使用int或float可能是多余的。