gpt4 book ai didi

java - 为什么我的intelliJ IDEA不建议我实现 `Parcelable`接口(interface)的更多方法?

转载 作者:行者123 更新时间:2023-11-30 02:27:55 25 4
gpt4 key购买 nike

我希望我的 POJO 实现 Parcelable 接口(interface):

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

最佳答案

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

它明确指出:

interface Parcelable.Creator Interface that must be implemented and provided as a public CREATOR field that generates instances of your Parcelable class from a Parcel.

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

至于 IntelliJ,它不会自动建议 CREATOR,因为它只能自动建议未实现的方法——您需要通过一些专门命名的公共(public)变量来提供 creator 的事实不是常见的解决方案(而且糟糕的 imo,但是嘿),而是一个人为的契约,IDE 无法预见。

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

关于java - 为什么我的intelliJ IDEA不建议我实现 `Parcelable`接口(interface)的更多方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com