0

我想生成自定义 getter 和 setter,这样当我将这些实例保存到 SQL 数据库中时,我可以更好地处理变量。我想生成类似的东西:

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 个类,我不会手动编写。

4

5 回答 5

1

我不知道你为什么需要这个,但这里是自定义 Getter 和 Setter 的方法。您可以通过转到首选项 > java > 代码样式 > 代码模板并选择代码来更新所有生成的 setter 和 getter,然后编辑 Getter body 和 Setter body 并输入:

获取器主体: return get(${field});

设置器主体: set(${field}, ${param});

让我知道这是否有效

于 2013-04-22T11:56:40.550 回答
1

我建议您不要按照您的描述进行操作,而应该使用Spring Data。具体来说,包BeanPropertyRowMapper中的类org.springframework.jdbc.core会做你想做的事。

在Spring API 文档中阅读更多内容。

于 2013-04-22T12:16:09.423 回答
0

没有其他插件可用!

一些插件如何编写特定于您的业务逻辑的代码!

您必须为所有类中的 setter 和 getter 手动编写代码!

于 2013-04-22T11:16:30.950 回答
0

尝试一次写入。基于模板的代码生成器。您使用Groovy编写自定义模板,并根据 java 反射生成文件。这是生成任何文件的最简单方法。您可以通过生成 AspectJ 或 java 文件、基于 JPA 注释的 SQL、基于枚举的插入/更新等来制作 getters/settest/toString。

于 2014-05-18T12:53:34.037 回答
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,我只是复制所有定义的常量并运行生成器...

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";
于 2015-03-04T00:20:51.330 回答