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

问题描述 投票:-1回答:2

对于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);
    }
} 
java copy-constructor
2个回答
1
投票

没有本地方法可以做到这一点 - 唯一的方法是手动分配字段值,就像你一样。

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

我尝试使用它但结果却是最后一个变量。

this是对象的引用。你不能给他另一个值 - 它只是没有意义。


0
投票

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

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

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

为了完整性:

  • 还有克隆Object.clone()作为复制构造函数的替代品,但由于它的开销,它正逐渐失宠。
  • 然后还有用于复制的序列化,它仍在大量使用,但不应在此处使用。
© www.soinside.com 2019 - 2024. All rights reserved.