在 Android 中从包裹中读取对象时,当我们不想使用默认的类加载器时



在实现 Parcelable 接口时,CREATOR 实现通常使用一个接受 Parcel 的构造函数,例如

public Foo(Parcel parcel)

在这个包裹中,我们可能有类似

mMyField = parcel.readParcelable(MyFoo.class.getClassLoader())

据我所知,通常可以使用默认的类加载器并传入 null,因为 parcel.writeParcelable(mMyField) 已经将类名存储在包裹中。

所以我的问题是,我什么时候需要使用MyFoo.class.getClassLoader()而不是传递null?

由于Parcel存储有关其类的信息,而不是类本身,因此该类将从名称加载,例如java/util/ArrayList。如果您的类不在类路径上,或者.class文件位于远程服务器上,即使您需要使用可以访问它的其他类加载器,例如URLClassLoader .

最新更新