Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将对象的副本添加到ArrayList_Java_Arraylist - Fatal编程技术网

Java 将对象的副本添加到ArrayList

Java 将对象的副本添加到ArrayList,java,arraylist,Java,Arraylist,我有以下代码: Element excludeFilterElementMerged = excludeFilter.elements.get(0); for (model.rest.filter.Segment.Element elementExcl : excludeFilter.elements) { filterPosition++; excludeFilterElementMerged.isIncluded = "false"; if (filterPosit

我有以下代码:

Element excludeFilterElementMerged = excludeFilter.elements.get(0);
for (model.rest.filter.Segment.Element elementExcl : excludeFilter.elements) {
    filterPosition++;
    excludeFilterElementMerged.isIncluded = "false";

    if (filterPosition % 10 == 0 || filterPosition == excludeFilter.elements.size()){
        elements.add(excludeFilterElementMerged);
        excludeFilterElementMerged = elementExcl;
    }

    excludeFilterElementMerged.filter.criteria.addAll(elementExcl.filter.criteria);
    excludeFilterElementMerged.filter.statement += " OR "+elementExcl.filter.statement;

}
excludeFilterElementMerged
添加到列表后,我希望在不影响列表中的对象的情况下为其提供新属性。我想,我可以通过给它分配一个新对象来解决这个问题:
excludeFilterElementMerged=elementExcl

解决这个问题的正确方法是什么


是否应将对象的
克隆添加到
列表中
?或者我应该创建一个类型为
Element
的新对象,将
excludeFilterElementMerged
放在里面,然后将它保存到
列表

excludeFilterElementMerged=elementExcl
绝对不是正确的方法,因为这样做不会复制对象,它只会创建一个新的引用


在Java中复制对象没有简单的方法。您必须实现
clone()
()或更好,拥有一个复制构造函数,例如
公共元素(最终元素另一个元素)

如果
elementExcl
clone
方法,您可以尝试
udefilterelementmerged=elementExcl.clone()没有,这是我的自定义对象。我相信你必须在你身上实现一个
克隆
方法object@luigonsec@m0skit0没错。建议避免克隆。您可以创建复制构造函数或静态工厂方法来复制objectPlus,以阻止克隆并推荐复制构造函数。谢谢您的回答。如果我的对象包含
muttable
属性,该构造函数应该是什么样子的?这在很大程度上取决于这些属性是什么,但主要取决于
this.X=anotherElement.X
。请注意,对于数据结构,您将需要复制它们,因此前面的方法不起作用。是的,这就是我现在正在做的,因为我的对象很复杂,这是相当多的工作。包含
列表
等。。。由于Java无法复制对象,所以需要进行大量的手动工作。很奇怪,它不能做到这一点……除了Clojure(但它使用不可变的结构,而且类很少使用,因为它主要是功能性的),我不知道其他任何语言可以立即复制对象。如果你有非常复杂的类,那它就是糟糕设计的征兆,例如。通常最好将大型类重构为小型类。