如何在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());
    }
}