问题 自定义eclipse模板让setter返回这个对象?


我需要自定义eclipse setter模板来返回这个对象,就像这样

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

但是Java-> Code Style-> Templates只允许我自定义setter body部分,而不是方法定义。有什么办法吗?


3266
2018-02-11 04:22


起源



答案:


我担心我无法提供允许您为此修改Eclipse模板的解决方案,但是我可以建议您重新考虑您在这里做的事情吗?

如果你检查一下 JavaBeans规范 您将看到,当您以这种方式定义方法时,它们不再是有效的属性设置器。塞特犬应该有一个 void 返回类型;从长远来看,你可能会后悔创建这些非标准的bean。例如,尝试使用 java.beans.Introspector 为您的班级收集豆类信息,您将看到找不到您的财产“安装者”。

我知道能够使用链式调用快速初始化bean是很好的,例如:

new Person().setName("John Smith").setDateOfBirth(...).setAddress(...)

作为替代方案,我可以建议您使用标准制定者(返回 void)而是引入构建器方法,如:

public Person withName(String name) {
    this.setName(name);
    return this;
}

您的快速单线构造如下所示:

new Person().withName("John Smith").withDateOfBirth(...).withAddress(...)

我发现'with'前缀也很好。


6
2018-03-03 22:55



是的,我认为你是对的。 - secmask
我只是希望有一种方法可以让eclipse在生成setter时生成'with'方法。还是没弄明白怎么做。 - Kango_V
快速代码插件将为您处理此问题。 java bean规范已经破坏并且已经存在了很长时间。仔细决定是否真的关心豆规格,我知道我从未真正关心过。 - lscoughlin
我个人并不关心豆类规格。我更重视生成不可变POJO的可能性,其中每个setter方法返回对象的修改副本 - xorcus


答案:


我担心我无法提供允许您为此修改Eclipse模板的解决方案,但是我可以建议您重新考虑您在这里做的事情吗?

如果你检查一下 JavaBeans规范 您将看到,当您以这种方式定义方法时,它们不再是有效的属性设置器。塞特犬应该有一个 void 返回类型;从长远来看,你可能会后悔创建这些非标准的bean。例如,尝试使用 java.beans.Introspector 为您的班级收集豆类信息,您将看到找不到您的财产“安装者”。

我知道能够使用链式调用快速初始化bean是很好的,例如:

new Person().setName("John Smith").setDateOfBirth(...).setAddress(...)

作为替代方案,我可以建议您使用标准制定者(返回 void)而是引入构建器方法,如:

public Person withName(String name) {
    this.setName(name);
    return this;
}

您的快速单线构造如下所示:

new Person().withName("John Smith").withDateOfBirth(...).withAddress(...)

我发现'with'前缀也很好。


6
2018-03-03 22:55



是的,我认为你是对的。 - secmask
我只是希望有一种方法可以让eclipse在生成setter时生成'with'方法。还是没弄明白怎么做。 - Kango_V
快速代码插件将为您处理此问题。 java bean规范已经破坏并且已经存在了很长时间。仔细决定是否真的关心豆规格,我知道我从未真正关心过。 - lscoughlin
我个人并不关心豆类规格。我更重视生成不可变POJO的可能性,其中每个setter方法返回对象的修改副本 - xorcus


您可以使用 快速代码Eclipse插件 很容易做到这一点。


4
2017-08-07 02:36





据我所知,您所能做的就是用Java编辑“Window-> Preferences-> Java-> Code Style-> Code-> Setter body”模板,如下所示:

${field} = ${param};
return this;

虽然这不会自动为您设置返回类型,但Eclipse会为您的每个setter抛出一个红色波浪形,然后您可以将鼠标悬停在其上并选择“将方法返回类型更改为'yourTypeHere'”。


0
2017-08-18 16:29