【问题标题】:Confused about the inner workings of Serializable对 Serializable 的内部工作感到困惑
【发布时间】:2015-11-12 09:12:53
【问题描述】:

我有一个类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;
    }
}

我可以像这样在Intent 中发送Den 实例:

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");

现在我的问题是:为什么我需要在Den 上实现Serializable 接口,而不是像intfloatString 这样的原始数据类型?内部发生了什么?

【问题讨论】:

  • 因为你不能,这反过来又是因为它们已经被定义了。正如您从 Javadoc 中看到的那样,所有原语都已可序列化,String 也是如此。你的问题没有意义。

标签: java android serialization


【解决方案1】:

为什么Den需要实现Serializable接口,却不需要 原始数据类型,如 int、float 或 String?

String 是可序列化的,没有原始类型。

原始类型不能实现接口。

JVM 在序列化对象时会处理原始类型的字段。

【讨论】:

    【解决方案2】:

    原始类型已经是可序列化的

    在你自己的类型中,考虑实现Parcelable interface 比 Serializable 更好

    有一些适用于 Android Studio 的插件使其非常容易实现,结果是更好的性能

    【讨论】:

      【解决方案3】:

      Intent 类已经使您能够通过putExtra() 在活动之间传递各种数据类型(其中大部分是原始数据类型)。所以你只需要在自定义对象上实现Serializable

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

      【讨论】:

        猜你喜欢
        • 2016-07-29
        • 2015-01-13
        • 2023-04-08
        • 2011-10-13
        • 2016-05-27
        • 2012-08-24
        • 2019-03-18
        • 2021-06-24
        • 1970-01-01
        相关资源
        最近更新 更多