【发布时间】:2018-05-06 06:55:05
【问题描述】:
假设我有 2 个继承了很多字段的类,
我想创建另一个具有相同值的类 C、D 的“继承系列” - 内容(在 RUN TIME 中),如下例所示..
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'}
【问题讨论】:
-
很难理解这里的真正问题...您能说明您在哪里进行克隆吗?关于您的
CLONED_NEW_NAME输出,这只是您的toString产生什么内容的问题吗?否则,您是否尝试在克隆对象时生成替代类型/类? -
使用复制构造函数。如果你的类有这么多的字段,这看起来很繁重,那么这个类可能还是太大了。
-
除了类名之外,C 和 D 与 A 和 B 相比有什么不同?
-
@VitalyT,我想我明白了。只有一个类结构 a-->b,然后使用两个不同的导出类/方法将 a-->b 存储到不同的实体中不是更容易吗?
-
创建一个
Exporter类,您可以通过在构造函数中设置要导出到的实体名称来配置它,然后有一个导出方法export(B b)将给定对象存储在为此的实体集中Exporter的特定实例。这个例子当然被大大简化了,因为我对 API 和需要配置的内容一无所知。