2015-07-10 20 views
0
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); 
    } 
} 

我想避免copytoc1copytoc2方法,它們是綁定的對象類型想要編寫類似public T copy(Map m, T t)的通用複製方法,但無法使其工作。這裏簡單地說明如何避免乾燥。如何在Java對象設置器中關注DRY?

注:我使用的JDK7

+0

您的代碼不似乎有效,不要認爲它編譯(您的複製方法不返回任何內容)。請張貼有效的代碼。 – sstan

+0

它的設計問題,我想避免d.copytooc1()d.copytooc2(),因爲它們是相同的代碼塊。我想要避免相同的重複代碼。 – learningJava

回答

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()); 
    } 
} 
0

在這個例子中child1child2應該是一個更通用類childres。

在那裏你可以實現共同的設置,並在每個孩子的細節。那麼,當你想要做copytoc1,你會怎麼做:

public child1 copytoc1(Map m, child1 c) { 
    copytoc(m,c); //a parent method. 
    // especific methods: 
    c.setName(m.get("name")) 
    } 
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()); 
    } 
}