【问题标题】:Custom eclipse template to make setter return this object?自定义eclipse模板使setter返回这个对象?
【发布时间】:2011-02-11 04:22:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: java eclipse templates


    【解决方案1】:

    恐怕我无法提供允许您为此修改 Eclipse 模板的解决方案,但是我可以建议您重新考虑一下您在这里做什么吗?

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

    我知道能够使用以下链接调用快速初始化您的 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'前缀也很好读。

    【讨论】:

    • 我只是希望有一种方法可以让 eclipse 在生成 setter 时生成 'with' 方法。还是不知道怎么弄。
    • 快速代码插件将为您处理这个问题。 Java bean 规范被破坏并且已经存在很长时间了。仔细决定你是否真的关心 bean 规格,我知道我从来没有真正关心过。
    • 我个人不太关心 bean 规范。我更重视生成不可变 POJO 的可能性,其中每个 setter 方法都返回对象的修改副本
    【解决方案2】:

    您可以使用Fast Code Eclipse Plugin 轻松完成此操作。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-09
        • 2016-12-06
        • 2016-05-21
        • 2018-05-09
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多