通过调用getter和setter复制JavaBean
有没有办法通过调用它的getter和setter来深度复制2个java对象?所有的setter和getter都是公共方法 谢谢通过调用getter和setter复制JavaBean,java,Java,有没有办法通过调用它的getter和setter来深度复制2个java对象?所有的setter和getter都是公共方法 谢谢 Java提供clone()来执行浅拷贝,但可以扩展以执行深拷贝。更多细节 Java提供clone()来执行浅拷贝,但可以扩展以执行深拷贝。更多细节 在Commons中,BeanUtils可能通过在两个不同的bean之间匹配getter/setter来实现您想要的功能 public class Test { public static void main(S
public class Test
{
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException
{
new Test().run();
}
private void run() throws IllegalAccessException, InvocationTargetException
{
Bean1 one = new Bean1();
one.setProp1("Foo");
Bean2 two = new Bean2();
BeanUtils.copyProperties(two, one);
System.out.println(ToStringBuilder.reflectionToString(one));
System.out.println(ToStringBuilder.reflectionToString(two));
}
public class Bean1
{
private String propbean1;
public String getProp1()
{
System.out.println("bean1 getter");
return propbean1;
}
public void setProp1(String s)
{
System.out.println("bean1 setter");
propbean1 = s;
}
}
public class Bean2
{
private String propbean2;
public String getProp1()
{
System.out.println("bean2 getter");
return propbean2;
}
public void setProp1(String s)
{
System.out.println("bean2 setter");
propbean2 = s;
}
}
}
印刷品
bean1 setter
bean1 getter
bean2 setter
Test$Bean1@1f7d2f0e[propbean1=Foo]
Test$Bean2@539c5048[propbean2=Foo]
在Commons中,BeanUtils可能通过在两个不同的bean之间匹配getter/setter来实现您想要的功能
public class Test
{
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException
{
new Test().run();
}
private void run() throws IllegalAccessException, InvocationTargetException
{
Bean1 one = new Bean1();
one.setProp1("Foo");
Bean2 two = new Bean2();
BeanUtils.copyProperties(two, one);
System.out.println(ToStringBuilder.reflectionToString(one));
System.out.println(ToStringBuilder.reflectionToString(two));
}
public class Bean1
{
private String propbean1;
public String getProp1()
{
System.out.println("bean1 getter");
return propbean1;
}
public void setProp1(String s)
{
System.out.println("bean1 setter");
propbean1 = s;
}
}
public class Bean2
{
private String propbean2;
public String getProp1()
{
System.out.println("bean2 getter");
return propbean2;
}
public void setProp1(String s)
{
System.out.println("bean2 setter");
propbean2 = s;
}
}
}
印刷品
bean1 setter
bean1 getter
bean2 setter
Test$Bean1@1f7d2f0e[propbean1=Foo]
Test$Bean2@539c5048[propbean2=Foo]
我的2个java对象可以是不同的类型,但我只对复制它们的属性感兴趣。+1用于添加序列化作为选项。它还有很多好处,除非你生活在真空中。我的2个java对象可以是不同的类型,但我只对复制它们的属性感兴趣。+1用于添加序列化作为选项。它还有很多好处,除非你生活在真空中。仅仅从阅读java文档来看,yt看起来是基于属性名而不是该属性的setter和getter进行复制的。你知道它实际上是从setter和getter复制的吗?@Sean Nguyen编辑以显示与不同私有属性名称匹配的getter/setter。仅从读取java文档来看,yt看起来是基于属性名称而不是该属性的setter和getter复制的。你知道它实际上是从setter和getter复制的吗?@Sean Nguyen编辑以显示getter/setter与不同私有属性名称的匹配。