我在Activity中有两个相同类的对象,例如 User 。我创建了两个对象 user 和 editedUser 。为了避免相同的引用问题,我使用Google Gson从JSON字符串创建了这两个引用。这些类包含保存其他对象(例如,度数)的ArrayList。
我的问题是,当我更新 editedUser 的ArrayList中的Degree对象中的一个字段时,它也会自动反映在 user 对象中。如何避免这种情况?
这是我的代码
创建对象:
user = new Gson().fromJson(getIntent().getStringExtra("userdata"), User.class);
editedUser = new Gson().fromJson(getIntent().getStringExtra("userdata"), User.class);
我用这一行修改了它
editedUser.getDegrees().get(0).setTitle("Some Title");
此行也会更改 user 对象
答案 0 :(得分:0)
两个Degrees对象必须是不同的实例,由两个new Degrees()
创建(或独立的反序列化)。也许你做到了
User editedUser = new User();
editedUser.setDegrees(user.getDegrees());
如果这导致共享user
的内部度,则完成getDegrees
危险地公开内部列表。
editedUser.getDegrees().addAll(user.getDegrees());
答案 1 :(得分:0)
简单。您做了一个浅表复制,即。列表是副本,它们引用完全相同的对象。在这种情况下,您需要做一个深拷贝,即。不只是复制列表,还复制其中的每个元素。