2013-04-22 57 views
0

我想生成自定義getter和setter,所以我可以更好地處理變量,當我將這些實例保存到SQL數據庫。我想產生類似:生成自定義的Java Getters和Setter

public class Test extends SQLEntry { 

    private static final String NAME = "Name"; 

    public String getName() { 
     return get(NAME); 
    } 

    public void setName(String name) { 
     set(NAME, name); 
    } 
} 

但我可以在Eclipse中看到只生成以下代碼:

public class Test { 

    private String name; 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

有一些插件,能夠做到這一點?或者我錯過了什麼? 我有20個類,我不會手動寫這個。

+0

你談談平原JavaDevelopmentKit插件或關於特定的IDE? – reporter 2013-04-22 11:22:18

+1

你想完成什麼?如果你試圖將數據從數據庫(例如一個ResultSet)映射到一個類,那麼你應該使用一個像Hibernate或MyBatis這樣的ORM框架。如果你絕對不得不推出自己的產品,推土機是一個很好的工具,可以將課堂和詞典映射到彼此。但是,如果您使用的是基於Schema的RDMS,則應該使用ORM。 – 2013-04-22 11:22:20

回答

0

在我發現它,這是最好的做你自己到底...

如果你喜歡寫代碼比你最喜歡這種解決方案。

public class CodeGenerator { 

private final static String ENCODING = "UTF-8"; 
private final static String FILE_NAME = "File.txt"; 

public static void main(String[] args) { 
    try { 
     ArrayList<Carriage> names = getNames(); 
     for (Carriage c : names) { 
      createSetter(c.name, c.capitalName); 
      createGetter(c.name, c.capitalName); 
     } 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
} 

private static ArrayList<Carriage> getNames() throws FileNotFoundException { 
    File file = new File("/"); 
    InputStream is = CodeGenerator.class.getResourceAsStream(FILE_NAME); 
    Scanner s = new java.util.Scanner(is, ENCODING).useDelimiter("\\A"); 
    String content = s.next(); 
    String[] lines = content.split(System.getProperty("line.separator")); 
    ArrayList<Carriage> ret = new ArrayList<Carriage>(); 
    for (String line : lines) { 
     line = line.replaceAll("\\r", ""); 
     int firstCapitalIndex = line.indexOf("String") + 7; 
     int secondCapitalIndex = line.indexOf(" ", firstCapitalIndex); 
     int firstIndex = line.indexOf("\"") + 1; 
     int secondIndex = line.indexOf("\"", firstIndex + 1); 
     Carriage c = new Carriage(); 
     c.name = line.substring(firstIndex, secondIndex); 
     c.capitalName = line.substring(firstCapitalIndex, secondCapitalIndex); 
     ret.add(c); 
    } 
    return ret; 
} 

public static void createSetter(String name, String capitalName) { 
    String str = "public void set" + name + "(String val) {\n" 
      + "\tset(" + capitalName + ", val);\n" 
      + "}\n"; 
    System.out.println(str); 
} 

public static void createGetter(String name, String capitalName) { 
    String str = "public String get" + name + "() {\n" 
      + "\treturn (String) get(" + capitalName + ");\n" 
      + "}\n"; 
    System.out.println(str); 
} 

馬車:

package codegenerator; 

public class Carriage { 
    public String name; 
    public String capitalName; 
} 

並以FILE.TXT我只是coppy所有定義的常量和運行發電機...

public static final String NAME = "Name"; 
public static final String PHONE = "Phone"; 
public static final String EMAIL = "Email"; 
public static final String ADDRESS_1 = "Address1"; 
public static final String ADDRESS_2 = "Address2"; 
public static final String ADDRESS_3 = "Address3"; 
public static final String ICO = "Ico"; 
public static final String DIC = "Dic"; 
public static final String ADMIN_LOGIN = "AdminLogin"; 
public static final String ADMIN_PASSWORD = "AdminPassword"; 
public static final String LANGUAGE = "Language"; 
public static final String CODE = "CODE"; 
public static final String MONTHLY_PAYMENT = "MonthlyPayment"; 
0

沒有其他插件可用!

某些插件如何編寫特定於您的業務邏輯的代碼!

你必須爲所有類中的setter和getters手動編寫代碼!

+0

那麼這是可能的,因爲據我所知,他想從名字SOMENAME生成一個getter getSomename(和setSomename),但我也不認爲有一個插件可以這樣做.. – 2013-04-22 11:17:55

1

我不知道你爲什麼需要這個,但這裏是自定義Getters和Setters的方法。 您可以將首選項>的Java>代碼樣式>代碼模板和選擇代碼,然後編輯吸氣身體和Setter體更新所有生成的getter和setter方法,並把這個:

消氣體:得到的回報($ {場});

Setter body: set($ {field},$ {param});

讓我知道是否可行

+0

它的工作原理。我只需要向下滾動編輯getter的正文,因爲當我點擊「編輯模板」時,它最初選擇了編輯getters javadoc模板。 – Lukas 2013-04-23 10:09:15

1

我建議,而不是做你的描述,你應該使用Spring Data。具體來說,org.springframework.jdbc.core包中的BeanPropertyRowMapper類將執行您想要的操作。

瞭解更多Spring API documentation

0

嘗試write-it-once。基於模板的代碼生成器您使用Groovy編寫自定義模板,並根據java反射生成文件。這是生成任何文件的最簡單方法。您可以通過生成AspectJ或java文件,基於JPA批註的SQL,基於枚舉的插入/更新等來製作getters/settest/toString。