Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 - Fatal编程技术网

Java 如何从同一实体的arraylist创建实体的不同实例

Java 如何从同一实体的arraylist创建实体的不同实例,java,Java,我有一个类型为“Person”实体的arraylist,我想从arraylist中获取Person类型对象的单独实例。但是,当我执行相同操作并更新实体的属性时,arraylist中的实体会得到更新。因此,在所有情况下,在内存中保持对对象的相同引用。我想创建一个单独的内存引用。在下面的代码中,位置0和1处的personEntity都获得cardType“add” 为Person编写一个副本构造函数并执行以下操作: Person personEntity = new Person(personAr

我有一个类型为“Person”实体的arraylist,我想从arraylist中获取Person类型对象的单独实例。但是,当我执行相同操作并更新实体的属性时,arraylist中的实体会得到更新。因此,在所有情况下,在内存中保持对对象的相同引用。我想创建一个单独的内存引用。在下面的代码中,位置0和1处的personEntity都获得cardType“add”


为Person编写一个副本构造函数并执行以下操作:

 Person personEntity = new Person(personArrayList.get(0));

复制构造函数将取决于Person类的结构。复制构造函数将使用personArrayList.get(0)中属性的值初始化Person的新实例。

为Person编写一个复制构造函数,并执行以下操作:

 Person personEntity = new Person(personArrayList.get(0));

复制构造函数将取决于Person类的结构。复制构造函数将使用personArrayList.get(0)中的属性值初始化Person的新实例。

如果尝试克隆它会怎么样

 Person personEntity=personArrayList.get(0).clone();
 personEntity.setCardType("add");
 personArrayList.add(1,personEntity);
或者更好地亲自定义一个构造函数,您可以使用Person作为参数来创建它

 Person personEntity= Person.from(personArrayList.get(0));
 personEntity.setCardType("add");
 personArrayList.add(1,personEntity);

如果你想克隆它呢

 Person personEntity=personArrayList.get(0).clone();
 personEntity.setCardType("add");
 personArrayList.add(1,personEntity);
或者更好地亲自定义一个构造函数,您可以使用Person作为参数来创建它

 Person personEntity= Person.from(personArrayList.get(0));
 personEntity.setCardType("add");
 personArrayList.add(1,personEntity);

您应该实现可克隆的接口

Object.clone()只支持浅层复制,但如果需要深度克隆,则需要覆盖它。 然后,您只需要创建此方法:

@Override
public Test clone(){
    try {
        return (Test)super.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
        return null;
    }

}
这是因为Object.clone()受保护。 您可以通过以下网址获得更多信息:


您应该实现可克隆的接口

Object.clone()只支持浅层复制,但如果需要深度克隆,则需要覆盖它。 然后,您只需要创建此方法:

@Override
public Test clone(){
    try {
        return (Test)super.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
        return null;
    }

}
这是因为Object.clone()受保护。 您可以通过以下网址获得更多信息:


你需要创建一个新的人(使用new关键字),并以某种方式将原始人的所有属性复制到其中。没有直截了当的办法。您可以添加Person类的代码吗?如果您使用的是Spring,那么您可以使用BeanUtils.copyproperties(src、trgt、ignoreProp);用于缩短代码的函数。你必须单独创建一个新实例,并且可以在这个函数中使用第二个实例作为目标,第一个实例作为源。多谢你花了很多时间,你需要创建一个新的人(使用new关键字),并以某种方式将你原来的人的所有属性复制到其中。没有直截了当的办法。您可以添加Person类的代码吗?如果您使用的是Spring,那么您可以使用BeanUtils.copyproperties(src、trgt、ignoreProp);用于缩短代码的函数。你必须单独创建一个新实例,并且可以在这个函数中使用第二个实例作为目标,第一个实例作为源。谢谢,很多东西被困了很久是的,这是我最后一个选择,因为我在实体类personies中定义了很多标记,这是我最后一个选择,因为我在实体类Personclone中定义了很多标记,Personclone不是这样工作的,创建构造函数是我最后一个选择当使用克隆并更新任何属性时,创建构造函数是我想做的最后一个选择。如果它是一个基元类型,那么它不会被反射。如果不是,则必须实现自己的克隆()。正如我所说,“Object.clone()只支持浅层复制,但如果需要深度克隆,我们需要覆盖它。”当使用克隆并更新任何属性时,相同的属性会反射到父对象中。如果它是基元类型,则不会反射。如果不是,则必须实现自己的克隆()。正如我所说,“Object.clone()只支持浅层复制,但如果需要深度克隆,则需要重写它。”