对于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);
}
}
没有本地方法可以做到这一点 - 唯一的方法是手动分配字段值,就像你一样。
作为帮助者 - 您可以尝试使用Orika - Java bean映射框架(如果您的类是bean,则可以使用)。
我尝试使用它但结果却是最后一个变量。
this
是对象的引用。你不能给他另一个值 - 它只是没有意义。
复制构造函数用于java AWT中,包括Point,Rectangle,Polygon和其他几何类。通常在有很多物体的地方。
对于使用final
字段的不可变类,不需要复制构造函数。
使用可变类的经验让我倾向于建议切换到不可变类。使用复制构造函数,最终会复制或共享内部数据(如数组或列表)。代码风格不是很好。
为了完整性:
Object.clone()
作为复制构造函数的替代品,但由于它的开销,它正逐渐失宠。