将对象复制到另一个

Eug*_*neP 6 java

有没有通用的方法来实现将现有对象复制到另一个对象?

假设MyObj有一个idname字段.像这样:

MyObj myObj_1 = new MyObj(1, "Name 1");
MyObj myObj_2 = new MyObj(2, "Name 2");
Run Code Online (Sandbox Code Playgroud)

代替

myObj_2.setName(myObj_1.getName()) // etc for each field
Run Code Online (Sandbox Code Playgroud)

做一些如下事情:

myObj_2.copyFrom(myObj_1)
Run Code Online (Sandbox Code Playgroud)

这样它们就是不同的实例,但具有相同的属性.

Jim*_*ler 8

惯例是在构造时使用带有自己类型的一个参数的构造函数执行此操作.

MyObj myObj_2 = new MyObj(myObj_1);

没有Java约定来覆盖另一个对象的现有属性.这往往违背Java中对不可变对象的偏好(其中属性在构造时设置,除非有充分的理由不这样做).

编辑:关于clone(),许多工程师在现代Java中不鼓励这样做,因为它已经过时了语法和其他缺点.http://www.javapractices.com/topic/TopicAction.do?Id=71


Bor*_*vić 7

使用复制构造函数:

public class YourObject {
  private String name;
  private int age;

  public YourObject(YourObject other) {
     this.name = other.name;
     this.age = other.age;
  }
}
Run Code Online (Sandbox Code Playgroud)


Max*_*AMM 4

Object.clone()Cloneable 接口

  • 尽管这是正确的,但 Joshua Bloch 警告不要在 Effect Java 中使用克隆。最好创建一个复制构造函数。 (4认同)