如何在Java对象设置器中遵循DRY?
我想避免使用绑定对象类型的如何在Java对象设置器中遵循DRY?,java,dry,Java,Dry,我想避免使用绑定对象类型的copytoc1和copytoc2方法编写类似于public T copy(Map m,T)的通用复制方法,但无法使其工作。这里简单介绍如何避免干燥 注意:我使用的是jdk7您不会重复自己的话,因为没有为不同的孩子上不同的课 类是对象的类型。通过拥有一种类型的子对象的多个实例,可以拥有更多的子对象 下面是您的代码的一个版本,它可以编译并执行您希望执行的操作: import java.util.HashMap; import java.util.Map; public
copytoc1
和copytoc2
方法编写类似于public T copy(Map m,T)
的通用复制方法,但无法使其工作。这里简单介绍如何避免干燥
注意:我使用的是jdk7您不会重复自己的话,因为没有为不同的孩子上不同的课 类是对象的类型。通过拥有一种类型的子对象的多个实例,可以拥有更多的子对象 下面是您的代码的一个版本,它可以编译并执行您希望执行的操作:
import java.util.HashMap;
import java.util.Map;
public class parent {
}
public class child1 extends parent {
private String id;
private String name;
// getter & setter
}
public class child2 extends parent {
private String id;
private String name;
// getter & setter
}
public class demo {
public child1 copytoc1(Map m, child1 c) {
c.setid(m.get("id"));
c.setName(m.get("name"));
}
public child2 copytoc2(Map m, child2 c) {
c.setid(m.get("id"));
c.setName(m.get("name"));
}
public static void main(String args[]){
demo d =new demo();
Map m=new HashMap();
m.set("id","1");
m.set("name","1name");
d.copytoc1(m,new child1);
m.set("id","2");
m.set("name","2name");
d.copytoc1(m,new child2);
}
}
import java.util.HashMap;
导入java.util.Map;
公开课演示{
公共静态类父类{
}
公共静态类子类{
私有字符串id;
私有字符串名称;
}
公共无效复制儿童(地图m,儿童c){
c、 id=m.get(“id”);
c、 name=m.get(“name”);
}
公共静态void main(字符串参数[]){
Demo d=新的Demo();
Map m=新的HashMap();
m、 投入(“id”、“1”);
m、 放置(“名称”、“1名称”);
d、 抄袭儿童(m,新儿童());
m、 认沽权(“id”、“2”);
m、 放置(“名称”、“第二名称”);
d、 抄袭儿童(m,新儿童());
}
}
在本例中,child1
和child2
应该是更通用类的childres
在那里,您可以实现公共集合,并在每个子集合中实现细节。因此,当您想进行copytoc1时,您应该:
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static class parent {
}
public static class child {
private String id;
private String name;
}
public void copyToChild(Map<String, String> m, child c) {
c.id = m.get("id");
c.name = m.get("name");
}
public static void main(String args[]) {
Demo d = new Demo();
Map<String, String> m = new HashMap<>();
m.put("id", "1");
m.put("name", "1name");
d.copyToChild(m, new child());
m.put("id", "2");
m.put("name", "2name");
d.copyToChild(m, new child());
}
}
保留child1和child2,但将变量移到父变量中,因为它们是相同的变量
public child1 copytoc1(Map m, child1 c) {
copytoc(m,c); //a parent method.
// especific methods:
c.setName(m.get("name"))
}
您的代码似乎无效,不要认为它已编译(您的复制方法不会返回任何内容)。请先发布有效代码。这是一个设计问题,我想避免d.copytooc1()d.copytooc2()这两个代码块本质上是相同的。我想避免相同的重复代码。
public class demo {
static class parent {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
static class child1 extends parent {
}
static class child2 extends parent {
// getter & setter
}
public parent copy(Map m, parent c) {
c.setId((String) m.get("id"));
c.setName((String) m.get("name"));
return c;
}
public static void main(String args[]) {
demo d = new demo();
Map m = new HashMap();
m.put("id", "1");
m.put("name", "1name");
child1 c1 = new child1();
d.copy(m, c1);
m.put("id", "2");
m.put("name", "2name");
parent p = d.copy(m, new child2());
System.out.println(p.getName());
}
}