首页 > 解决方案 > 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

标签: javaandroidclassandroid-intenthashmap

解决方案


序列化和反序列化确实会创建新对象。

如果这对您来说是个问题,因为您将它用作 a 的键HashMap,您应该在您的类中实现 theboolean equals(Object other)int hashCode()方法。

查看Wikipedia 和Oracle 文档中的Java hashCode()public int hashCode()以了解如何实现“可散列”对象。

如果您的对象在用作密钥时不再依赖于身份,那么您的问题应该得到解决。


推荐阅读