“如何克隆”;“类树”;用JAVA命名的其他类?
假设我有两个继承类,其中包含很多字段 我想用C、D类创建另一个“继承族”,其值-内容(在运行时)与下面的示例相同“如何克隆”;“类树”;用JAVA命名的其他类?,java,java-8,clone,Java,Java 8,Clone,假设我有两个继承类,其中包含很多字段 我想用C、D类创建另一个“继承族”,其值-内容(在运行时)与下面的示例相同 package server.api.analytics; public class A { protected String param1; protected String param2; protected String param3; public String getParam1() { return param1;
package server.api.analytics;
public class A {
protected String param1;
protected String param2;
protected String param3;
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1;
}
public String getParam2() {
return param2;
}
public void setParam2(String param2) {
this.param2 = param2;
}
public String getParam3() {
return param3;
}
public void setParam3(String param3) {
this.param3 = param3;
}
public static void main(String[] args) {
B b = new B();
b.setParam1("out_param1");
b.setParam2("out_param2");
b.setParam3("out_param3");
b.setParam4("out_param4");
b.setParam5("out_param5");
System.out.println(b.toString());
// OUTPUT:
B{param1='out_param1', param2='out_param2', param3='out_param3',
param4='out_param4', param5='out_param5'}
// EXPECTED :
D{param1='out_param1', param2='out_param2', param3='out_param3',
param4='out_param4', param5='out_param5'}
}
}
class B extends A {
protected String param4;
protected String param5;
public String getParam4() {
return param4;
}
public void setParam4(String param4) {
this.param4 = param4;
}
public String getParam5() {
return param5;
}
public void setParam5(String param5) {
this.param5 = param5;
}
@Override
public String toString() {
return "B{" +
"param1='" + param1 + '\'' +
", param2='" + param2 + '\'' +
", param3='" + param3 + '\'' +
", param4='" + param4 + '\'' +
", param5='" + param5 + '\'' +
'}';
}
}
B{param1='out_param1', param2='out_param2', param3='out_param3', param4='out_param4', param5='out_param5'}
我不想像“复制承包商”一样复制所有的属性,因为有很多,如果我用克隆做“深度复制”,类名将是相同的
预期的例子:
D{param1='out_param1', param2='out_param2', param3='out_param3', param4='out_param4', param5='out_param5'}
您可以使用:
将属性值从源bean复制到目标bean,以便
属性名称相同的所有情况
例如:
- B扩展A
- D entends C
B
复制到D
:
import org.apache.commons.beanutils.BeanUtils;
public class Main {
public static void main(String[] args) throws Exception {
B source = new B();
source.setParam("param");
source.setParameter("parameter");
D target = new D();
try {
BeanUtils.copyProperties(target, source);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(source.getParam()); // param
System.out.println(source.getParameter()); // parameter
System.out.println(target.getParam()); // param
System.out.println(target.getParameter()); // parameter
}
public static class A {
String param;
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
}
public static class B extends A {
String parameter;
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
public static class C {
String param;
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
}
public static class D extends C {
String parameter;
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
}
很难弄清楚问题到底是什么。。。你能告诉我你在哪里做克隆吗?关于您的
CLONED\u NEW\u NAME
输出,这只是您的toString
生成的内容的问题吗?否则,在克隆对象时是否尝试生成替代类型/类?请使用复制构造函数。如果你的类有这么多的字段,这看起来很繁重,那么这个类可能太大了。除了类名之外,C和D与A和B相比还有什么不同呢?@VitalyT,我想我明白了。如果只有一个类结构a-->b,然后有两个不同的导出类/方法将a-->b存储到不同的实体中,不是更容易吗?创建一个导出器
类,您可以通过在构造函数中设置要导出到的实体名来配置它,然后有一个导出方法,导出(b)
将给定对象存储在导出器的此特定实例的实体集中。这个例子当然被大大简化了,因为我对API和需要配置的东西一无所知。嗨,它会把类名改成其他的吗?例如:“D”@VitalyT否,请参阅我的更新。在复制之前,您需要创建一个空的d
。将检查它,您有Pom.xml的maven属性吗?@VitalyT commons beanutils commons beanutils 1.8.3 BWT,如果我需要继承,我需要创建,例如“class d extensed F”??