在 Eclipse 中自动为类创建构建器
Posted
技术标签:
【中文标题】在 Eclipse 中自动为类创建构建器【英文标题】:Automatically create builder for class in 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 - 我不喜欢你的回答。不可能对 cmets 投反对票,但我实际上给了你-1。也许您不应该仅仅对 google 找到的链接的纯粹存在感到高兴。我已经尝试过 Fluent Builder Generator,它已经 10 年没有更新了,并且生成了相当复杂的代码,而不是一个很好的简单生成器。
@HonzaZidek 这不是一个 Eclipse 插件,但也许你会尝试一下:github.com/mkarneim/pojobuilder
@Sridhar-Sarnobat 实际上有一个错误报告,隐藏在 Bugzilla 中:bugs.eclipse.org/bugs/show_bug.cgi?id=458364
【参考方案1】:
我目前将 Spark Builder Generator 与 Eclipse Neon.1a Release (4.6.1) 一起使用,效果很好。
https://marketplace.eclipse.org/content/sparkbuildergenerator https://github.com/helospark/SparkBuilderGenerator您可以在以下位置设置首选项: 窗口->首选项->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.shortNameBuilder
public static $cls.nameBuilder builder()
return new $cls.nameBuilder();
<% for(field in cls.fields) %>
private $field.type.name $field.name;
<% %>
<% for(field in cls.fields) %>
public $cls.nameBuilder $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 有哪些风险?”这里:***.com/questions/4589184/… 以及“使用 Project Lombok 安全吗?”这里:***.com/questions/3852091/…【参考方案5】:
您可以添加自己的模板窗口 -> 首选项 -> java -> 编辑器 -> 模板,这将通过内容提议而不是重构操作激活
【讨论】:
我认为您不能为构建器模式编写模板。即使它可以工作,这也是一个坏主意,因为模板不提供更新的方法,您必须手动删除代码并重新应用模板。以上是关于在 Eclipse 中自动为类创建构建器的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Eclipse 以运行外部构建器或 shell 命令?
Eclipse / Android:“在项目上运行构建器'Android Pre Compiler'时出错......”