gpt4 book ai didi

java - 打包/取消打包自定义对象的 HashMap 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 04:06:44 25 4
gpt4 key购买 nike

我有一个定义私有(private) HashMapEvent 类:

private Map<String, Object> data = new HashMap<String, Object>();

Event 类是任何类型“事件”的包装。此 HashMap 可以包含由键引用的任何对象实例。接收 Event 实例的类知道哪个类与每个键相关,因此它可以安全地将 Object 转换为其相应的子类。

当我尝试在 2 个进程之间传递 Event 实例时出现问题。 Event 实现了 Parcelable,因此它可以通过 Message 发送:

Bundle bundle = new Bundle();
bundle.putParcelable(Event.BUNDLE_KEY, event);

// Make the message with the bundle
Message message = new Message();
message.setData(bundle);

解码时:

public void readFromParcel(Parcel in) {

idEvent = in.readInt();
priority = in.readInt();
idSource = in.readInt();
idDestination = in.readInt();
action = in.readInt();

Bundle mapBundle = in.readBundle();

if (mapBundle.getSerializable(MAP_KEY) instanceof HashMap) {
data = (Map<String, Object>) mapBundle.getSerializable(MAP_KEY);
} else {
Log.e(TAG, "Parcel reading error: not a HashMap");
}
}

问题是这行不通,因为我需要向 mapBundle 指定要使用哪个 ClassLoader,例如mapBundle.setClassLoader(Entity.class.getClassLoader());但是我不知道HashMapObject 子类会有什么...

这是我的想法:

  • 编写一个 ClassLoader 来加载这些类中的任何一个。问题是我无法获取表示对象的 byte[],因为它位于 HashMap 中。而且我不能使用 mapBundle.getSerializable() 来获取它,因为它恰好会抛出 ClassNotFound 异常。

  • 传递一些额外的信息,这样我就可以知道 HashMap 上有哪些类。除了这看起来是多余的信息之外,仍然不行,因为如果我在 Bundle 上设置一个类加载器,它仍然会在其他类上抛出 ClassNotFound 异常...

我非常感谢在这个问题上的一些帮助。提前致谢!

最佳答案

实际上 this回答我的问题。我必须获得对我的 ClassLoader 的引用,然后将其设置为反序列化,我认为这是通过另一个线程完成的,可能是系统线程,因此它不知道我的类。

关于java - 打包/取消打包自定义对象的 HashMap 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503980/

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