Java Copy Constructor with" this"关键词

时间:2017-07-11 19:05:29

标签: java c++ constructor copy this

我对java有一个很普遍的问题。 我想知道是否有一种简单的方法可以在java中重新创建这个c ++代码:

class A 
{

public:
  int first;
  int second;

  A(const A& other) {
    *this = other;
  }

...
}

所以基本上是一个复制构造函数,你可以在构造函数中传递A的一个新对象的现有对象,它将复制内容并构建A的现有对象的精确副本。

试图

class A {
  int first;
  int second;

  public A(A other){        
    this = other;
  }
 ...
}
遗憾的是,没有工作,因为日食告诉我"这个"在作业的左侧不允许使用,因为它不是变量。

我知道我会做同样的结果:

class A {
      int first;
      int second;

      public A(A other){        
        this.first = other.first;
        this.second = other.second;

      }
     ...
    }

但我想知道是否有更简单的方法,因为有时你会有更多的类变量。

提前致谢!

3 个答案:

答案 0 :(得分:1)

你在该类的第三个版本中所拥有的是与你的C ++类完全相同的合法java,但我认为没有比你所写的更简单的方法。

答案 1 :(得分:1)

回收代码的最佳方式:

class A {

   int first;
   int second;

   public A(int f, int s){        
      this.first = f;
      this.second = s;
   }

   public A(A a){
      this(a.first, a.second); // id use getters instead ofc.
   }
}

答案 2 :(得分:1)

Java语言没有更简单的方法,但是有一些棘手的技术可以让你这样做:

  1. 通过序列化克隆对象:http://www.avajava.com/tutorials/lessons/how-do-i-perform-a-deep-clone-using-serializable.html:precondition - 结构中类的所有属性必须是原始属性或标记为Serializable的类
  2. toString() - > fromString(String s) - 必须实现相应的方法
  3. 使用像Jackson等可用库的中间XML / JSON表示,可以轻松地重建POJO和bean。
  4. 据我所知,直接映射后最有效的方法是通过序列化机制。