带有“this”关键字的Java复制构造函数[重复]

Posted

技术标签:

【中文标题】带有“this”关键字的Java复制构造函数[重复]【英文标题】:Java Copy Constructor with the "this" keyword [duplicate] 【发布时间】:2017-12-15 23:54:15 【问题描述】:

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

class A 


public:
  int first;
  int second;

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

...

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

尝试

class A 
  int first;
  int second;

  public A(A other)        
    this = other;
  
 ...

很遗憾不起作用,因为 eclipse 告诉我“this”不允许出现在赋值的左侧,因为它不是变量。

我知道我会得到相同的结果:

class A 
      int first;
      int second;

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

      
     ...
    

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

提前致谢!

【问题讨论】:

你可以创建一个私有构造函数来接收你的所有变量,并让所有其他构造函数以某种方式调用它。 你的意思是一个构造函数,它接受该对象的一个​​实例,然后复制它的数据。这可能就这么简单。 @Daedric 完全正确 - 但不必单独复制其变量。 (我想知道我在提交问题后是否误用了复制构造函数这个词 - 这是否导致混淆?) 【参考方案1】:

Java 语言没有定义更简单的方法,但是有一些技巧可以让您这样做:

    通过序列化克隆对象:http://www.avajava.com/tutorials/lessons/how-do-i-perform-a-deep-clone-using-serializable.html:前提条件 - 结构中类的所有属性必须是原始的或标记为 Serializable 的类 toString() -> fromString(String s) - 必须实现相应的方法 POJO 和 bean 可以通过 Jackson 等可用库使用中间 XML/JSON 表示轻松重构。

据我所知,直接映射后最有效的方法是通过序列化机制。

【讨论】:

好的,非常感谢,我去看看序列化! 是的,序列化很好,但与简单的构造函数相比,它会涉及更多。【参考方案2】:

您在该类的第三个版本中拥有的是合法的 java,它与您的 C++ 类做同样的事情,但是我认为没有比您编写的更简单的方法了。

【讨论】:

【参考方案3】:

回收代码的最佳方式:

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.
   

【讨论】:

以上是关于带有“this”关键字的Java复制构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java - 何时使用'this'关键字[重复]

java使用this关键字调用本类重载构造器

Java中this关键字在构造方法中的使用

Java面向对象之关键字this 入门实例

带有私有变量的JavaScript构造函数模式[重复]

如何使用 UML 在构造函数中表示 Java“this”关键字