【问题标题】:Automatically create builder for class in Eclipse在 Eclipse 中自动为类创建构建器
【发布时间】:2015-06-12 04:28:08
【问题描述】:

有没有办法使用 自动构建器Eclipse 中的类创建构建器 (Joshua Bloch's Builder Pattern)?例如菜单中的选项、插件或其他东西。我在“Refactor”下找不到任何内容。

【问题讨论】:

  • 在 Google 上快速搜索 eclipse plugin builder pattern 找到了我(以及其他人)code.google.com/p/fluent-builders-generator-eclipse-plugin
  • 除非你能以某种方式通过制作模板来实现这一点,否则我唯一能想到的就是注解处理。它允许您创建一个注解,例如@Build,然后创建一个处理器以在您的源代码中查找该注解,在没有构建器类(可选)时引发错误,并允许客户端生成类似的构建器代码如何自动声明未实现的方法。至于插件,我相信你现在已经知道规则了/:这很糟糕,但你不能在这里请求工具
  • @Dirk - 我不喜欢你的回答。不可能对 cme​​ts 投反对票,但我实际上给了你-1。也许您不应该仅仅对 google 找到的链接的纯粹存在感到高兴。我已经尝试过 Fluent Builder Generator,它已经 10 年没有更新了,并且生成了相当复杂的代码,而不是一个很好的简单生成器。
  • @HonzaZidek 这不是一个 Eclipse 插件,但也许你会尝试一下:github.com/mkarneim/pojobuilder
  • @Sridhar-Sarnobat 实际上有一个错误报告,隐藏在 Bugzilla 中:bugs.eclipse.org/bugs/show_bug.cgi?id=458364

标签: java eclipse builder


【解决方案1】:

我目前将 Spark Builder Generator 与 Eclipse Neon.1a Release (4.6.1) 一起使用,效果很好。

您可以在以下位置设置首选项:
窗口->首选项->Java->Spark Builder 生成器

【讨论】:

  • 是的 Spark builder 运行良好。它有很多选择。像舞台建设者。看看吧。
【解决方案2】:

也许我迟到了。

Eclipse 本身不提供生成代码以支持构建器模式的方法。但是它可以通过插件进行扩展以增强功能。

有这个插件我用这个:

https://github.com/henningjensen/bpep

【讨论】:

  • 很遗憾,Google 代码正在关闭,因此该链接可能会在几个月后失效。这个项目在其他地方可用吗?
  • 不幸的是,这个插件似乎不再工作了。它创建了一个构建器,但似乎无法列出字段。
  • @FlorianSchaetz:我刚刚在 eclipse mars 上尝试过,它对我有用。
  • @Khanna111 这对我也不起作用。使用 eclipse luna
  • 我在Eclipse Neon.2 Release (4.6.2) 上使用了这个插件,它可以工作。这个插件还有一个优点是不需要注释。
【解决方案3】:

试试https://github.com/vojtek/write-it-once

package ${cls.package.name};

public class ${cls.shortName}Builder {

public static ${cls.name}Builder builder() {
    return new ${cls.name}Builder();
}
<% for(field in cls.fields) {%>
private ${field.type.name} ${field.name};
<% } %>
<% for(field in cls.fields) {%>
public ${cls.name}Builder ${field.name}(${field.type.name} ${field.name}) {
    this.${field.name} = ${field.name};
    return this;
}
<% } %>
public ${cls.name} build() {
    final ${cls.name} data = new ${cls.name}();
<% for(field in cls.fields) {%>
    data.${field.setter.name}(this.${field.name});
<% } %>
    return data;
}
}

【讨论】:

  • 它非常简单的解决方案 - 使用模板创建单独的单独项目,并从 main 生成 java 类
【解决方案4】:

您可能希望查看lombok 注释以生成没有样板代码的构建器。例如:

@Builder
public class MyPojo {
    private String name;
}

MyPojoBuilder.builder().name("yourame").build();

限制是这似乎不适用于抽象类。

【讨论】:

  • 一个明确的 +1 指导我完成一个我以前从未见过的伟大项目。这解决了问题并简化了生成样板代码的其他一些麻烦:)。
  • 令人印象深刻的能力。想知道为什么龙目岛不受欢迎吗?
  • 我在寻找 Lombok 的替代品时找到了这个答案,因为 @Builder 注释仍然(2017 年 4 月)不适用于父类提供的成员(正如 Jaco 提到的那样)。跨度>
  • @BasilMusa 无论 lombok 是否流行,您都应该阅读“Project Lombok 有哪些风险?”这里:stackoverflow.com/questions/4589184/… 以及“使用 Project Lombok 安全吗?”这里:stackoverflow.com/questions/3852091/…
【解决方案5】:

您可以添加自己的模板窗口 -> 首选项 -> java -> 编辑器 -> 模板,这将通过内容提议而不是重构操作激活

【讨论】:

  • 我认为您不能为构建器模式编写模板。即使它可以工作,这也是一个坏主意,因为模板不提供更新的方法,您必须手动删除代码并重新应用模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 2023-03-18
  • 2014-09-09
  • 1970-01-01
  • 2010-10-08
  • 2012-03-25
  • 2011-03-22
相关资源
最近更新 更多