为什么我的智能IDEA没有建议我实现更多'Parcelable`接口的方法?

时间:2014-12-28 22:55:57

标签: java android serialization interface parcelable

我希望我的POJO实现Parcelable接口:

import android.os.Parcel;
import android.os.Parcelable;

public class Phone implements Parcelable {
    public int id;
    public String phone;

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

    @Override
    public void writeToParcel(Parcel out, int i) {
        out.writeInt(id);
        out.writeString(phone);
    }
}

我看了一些教程(12) 实施更多方法的地方:

 public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
     public MyParcelable createFromParcel(Parcel in) {
         return new MyParcelable(in);
     }

     public MyParcelable[] newArray(int size) {
         return new MyParcelable[size];
     }
 };

 private MyParcelable(Parcel in) {
     mData = in.readInt();
 }

我是否需要实施更多方法?

如果是这样,为什么我的IDEA没有建议我在点击Parcelable界面时实施它们?

1 个答案:

答案 0 :(得分:1)

请查看文档: http://developer.android.com/reference/android/os/Parcelable.html

它明确指出:

  

接口Parcelable.Creator必须实现的接口   并作为公共CREATOR字段提供,生成实例   Parcel中的Parcelable类。

术语中的MyParcelable()是一个构造函数。在示例中需要初始化接口实现对象的状态(mData字段),但Parcelable合同不需要它。 也就是说,你确实需要一个构造函数,除非你要设置&#39; id&#39;和&#39;电话&#39;字段通过setter(您需要依次实现),但只有在对象的生命周期中这些属性可能发生变化时才有意义。所以取决于你的需求。

至于IntelliJ,它不会自动建议CREATOR,因为它只能自动建议未实现的方法 - 你需要通过一些特别命名的公共变量来提供创建者的事实不是常见的解决方案(和蹩脚的imo,但是嘿),而是一个人为的合同,IDE无法预见。

关于构造函数 - 接口没有构造函数,它是你需要它的实现 - 自动建议应该弹出作为字段(id,phone)上的一个突出显示它们是&#re;没有初始化。