寻找简洁的复制构造函数实现(java)

时间:2019-02-27 10:36:57

标签: java copy-constructor

对于2个变量,可以将语句写入复制构造函数块中。但是对于存在多个变量的情况,请有人帮助我知道如何获得相似的结果吗?我使用this进行了实验,但结果却是最终变量。

class Obj
{
    int a, b;

    Obj(int a, int b)
    {this.a = a; this.b =b;}

    Obj(Obj obj1)
    //trying to copy every variable by concise logic here
    //instead of writing for each and every variable
    {a = obj1.a; b = obj1.b;} 
}

class CopyObj2 
{
    public static void main(String[] args) 
    {
        Obj obj1 = new Obj(5,10);
        System.out.println("Obj1\t"+obj1.a+", "+obj1.b);
        Obj obj2 = new Obj(obj1);
        System.out.println("Obj2\t"+obj2.a+", "+obj2.b);
    }
} 

2 个答案:

答案 0 :(得分:1)

没有本机的方法-唯一的方法就是像您一样手动分配字段值。

作为助手-您可以尝试使用Orika-Java bean映射框架(如果您的类是bean,则可以使用)。

  

我尝试使用它,但结果却是最终变量。

this是对您的对象的引用。您无法为他分配其他值-只是没有意义。

答案 1 :(得分:0)

复制构造函数用于Java的AWT派生Point,Rectangle,Polygon和其他几何类。通常在有很多物体的地方。

对于具有final字段的不可变类,不需要复制构造函数。

使用可变类的经验让我倾向于建议切换到不可变的类。 使用复制构造函数时,最终需要大量复制或共享内部数据(例如数组或列表)。代码风格不是很好。

出于完整性考虑:

  • 还有 cloning Object.clone()作为 copy 构造函数的替代方法,但由于开销太大,它逐渐失宠。

  • 然后也有用于复制的序列化,该序列仍在大量使用,但不应在此处使用。