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);
}
}
我想避免绑定对象类型的copytoc1
和copytoc2
方法想要编写类似public T copy(Map m, T t)
的通用复制方法,但无法使其工作。这里简单地说如何避免干旱。
注意:我使用的是jdk7
答案 0 :(得分:2)
不为不同的孩子开设不同的课程,你不会重复自己。
类是对象的类型。通过拥有一种类型的孩子的多个实例,您可以拥有更多孩子。
这是您的代码的一个版本,它编译并执行您想要执行的操作:
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());
}
}
答案 1 :(得分:0)
在此示例中,child1
和child2
应该是更通用的类的子代。
在那里你可以实现公共集,并在每个孩子中具体细节。那么,当你想做copytoc1时,你会这样做:
public child1 copytoc1(Map m, child1 c) {
copytoc(m,c); //a parent method.
// especific methods:
c.setName(m.get("name"))
}
答案 2 :(得分:0)
同时保留child1和child2,但将变量移动到父项中,因为它们是相同的变量
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());
}
}