对于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);
}
}
答案 0 :(得分:1)
没有本机的方法-唯一的方法就是像您一样手动分配字段值。
作为助手-您可以尝试使用Orika-Java bean映射框架(如果您的类是bean,则可以使用)。
我尝试使用它,但结果却是最终变量。
this
是对您的对象的引用。您无法为他分配其他值-只是没有意义。
答案 1 :(得分:0)
复制构造函数用于Java的AWT派生Point,Rectangle,Polygon和其他几何类。通常在有很多物体的地方。
对于具有final
字段的不可变类,不需要复制构造函数。
使用可变类的经验让我倾向于建议切换到不可变的类。 使用复制构造函数时,最终需要大量复制或共享内部数据(例如数组或列表)。代码风格不是很好。
出于完整性考虑:
还有 cloning Object.clone()
作为 copy 构造函数的替代方法,但由于开销太大,它逐渐失宠。
然后也有用于复制的序列化,该序列仍在大量使用,但不应在此处使用。