【问题标题】:why doesn't my intelliJ IDEA suggest that I implement more methods of `Parcelable` interface?为什么我的 intelliJ IDEA 不建议我实现更多的 `Parcelable` 接口方法?
【发布时间】:2014-12-28 22:55:56
【问题描述】:

我希望我的 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界面右击时不建议我实现它们?

【问题讨论】:

    标签: java android serialization interface parcelable


    【解决方案1】:

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

    它明确指出:

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

    MyParcelable() 在术语中是一个构造函数。示例中需要初始化接口实现对象的状态(mData 字段),但 Parcelable 合约不需要。 也就是说,您确实需要一个构造函数,除非您要通过设置器设置“id”和“电话”字段(您需要依次实现),但这只有在这些属性可以在对象的生命。所以取决于你的需求。

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

    关于构造函数 - 接口没有构造函数,它是您的实现需要它 - 自动建议应弹出作为字段(id、电话)上的突出显示,说明它们未初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2022-07-29
      相关资源
      最近更新 更多