gpt4 book ai didi

java - Android Parcelable接口(interface)在哪里强制执行CREATOR对象

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:36 34 4
gpt4 key购买 nike

我在 Android 中使用 Parceables,我对这个错误很好奇...

11-23 16:17:07.174: E/AndroidRuntime(1277): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.gleason.apahelper.model.PlayerTeam

当然这是因为我错过了这个...

public static final Parcelable.Creator<Player> CREATOR = new Parcelable.Creator<Player>() {
public Player createFromParcel(Parcel in) {
return new Player(in);
}
public Player[] newArray(int size) {
return new Player[size];
}
};

我的问题是,当我查看代码时 here我不知道它是如何确保您拥有 CREATOR 对象的。我可以看到哪里需要接口(interface),但看不到哪里需要 CREATOR 名称。有人可以更好地解释一下吗?我想在我正在编写的其他代码中使用这种模式,所以我想知道是否有人可以解释它。

最佳答案

Parcel 中实现方法中的类 public final <T extends Parcelable> Parcelable.Creator<T> readParcelableCreator() .如果它不能从指定的类加载器中获取创建者,它会假定默认的“CREATOR”:

    ...
Parcelable.Creator<T> creator;
synchronized (mCreators) {
HashMap<String,Parcelable.Creator> map = mCreators.get(loader);
if (map == null) {
map = new HashMap<String,Parcelable.Creator>();
mCreators.put(loader, map);
}
creator = map.get(name);
if (creator == null) {
try {
Class c = loader == null ?
Class.forName(name) : Class.forName(name, true, loader);
Field f = c.getField("CREATOR");
creator = (Parcelable.Creator)f.get(null);
}
...

编辑:忘记提及该方法利用反射来获取类中使用 c.getField("CREATOR") 实现的字段.

关于java - Android Parcelable接口(interface)在哪里强制执行CREATOR对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164758/

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