java - Android:intent.putExtra() 更改对象?
问题描述
我想将myObject传递给NewActivity类。为此,我使用 Intent 中的putExtra ()和getExtras()方法。然而,似乎该对象以某种方式发生了变化?我在通过它之前和之后都在打印对象。
这是正常的吗?我遇到了问题,因为我在 HashMap 中使用 myObject,并且由于 NewActivity 中的对象本质上是一个完全不同的对象,我不能再将它用作键。
传递对象:
Intent myIntent = new Intent(context, NewActivity.class);
MyClass myObject = new MyClass();
myIntent.putExtra("test", myObject);
System.out.println("OBJECT BEFORE: " + myObject);
检索对象:
MyClass myObject = (MyClass) getIntent().getExtras().getSerializable("test");
System.out.println("OBJECT AFTER: " + myObject);
(不同的)打印:
I/System.out: OBJECT BEFORE: my.project.MyClass@8fe5ae4
I/System.out: OBJECT AFTER: my.project.MyClass@9f1fb7b
解决方案
序列化和反序列化确实会创建新对象。
如果这对您来说是个问题,因为您将它用作 a 的键HashMap
,您应该在您的类中实现 theboolean equals(Object other)
和int hashCode()
方法。
查看Wikipedia 和Oracle 文档中的Java hashCode()public int hashCode()
以了解如何实现“可散列”对象。
如果您的对象在用作密钥时不再依赖于身份,那么您的问题应该得到解决。
推荐阅读
- flutter - API 调用后使用 Provider 更新状态
- angular - 如何以角度执行与禁用属性的属性绑定?
- r - 如何使用标准偏差的比率找到观察到的检验统计量?
- python - VSCode 上的终端没有抓取正确的 python 或 ipython
- python - DTW 和 kNN-DTW 时间复杂度
- javascript - 带有 Material UI 的 NextJS 10 编译速度太慢
- react-native - 在 React Native 中生成自动机
- python - 如何正确复制 Flask SQLAlchemy 中列的数据?
- sql - 为 PLSQL 块或过程中的查询设置超时?
- python - Pandas 10位数字提取