我有一个activity通过该activity创建了一个传递list of objects对话框。 在对话框中,我修改了全局object list数据。 问题是我的活动object list也从对话框数据操作object list被修改了。 我没有使用任何侦听器或方法来处理呼叫者类数据 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
将对象添加到我的列表中后,我正在更改列表中的数据,它正在被修改我有类似的代码
List<Data> oldList = // initializing the list
List<Data> newList = // initializing the list
for (Data data: oldList) {
if (condition) {
data.setvalue("");
newList.add(data);
data.setAnother();
}
}
如果我这样做, newList
中的数据对象也会发生变化。
我有一个要求,它应该在oldList
中更改,但它不应该更改newList
中的数据。
如果您不希望 newList 中的对象在从newList
更改对象时受到oldList
,则需要创建应添加到newList
的每个对象的副本。
为此,您可以在Data
类中实现一个复制构造函数(一个期望与参数相同类型的对象的构造函数)或使其实现Clonable
接口(但这种方法有一些严重的缺陷,请参见此处 - 段落“复制构造函数与克隆” )。
假设您已经实现了一个copy-constructor ,您的代码可能会这样编写:
List<Data> oldList = // initializing the list
List<Data> newList = // initializing the list
for (Data data: oldList) {
if (condition) {
Data copyForNewList = new Data(data); // creating a copy of the data object
copyForNewList.setvalue(""); // changing the copy
newList.add(copyForNewList); // string the copy
data.setAnother(); // mutating the original object
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.