在 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 - 我不喜欢你的回答。不可能对 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 【参考方案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 格式化程序设置

如何配置 Eclipse 以运行外部构建器或 shell 命令?

Eclipse / Android:“在项目上运行构建器'Android Pre Compiler'时出错......”

Eclipse - 运行构建器“Android Package Builder”时出错

在 Eclipse IDE 中发布构建期间发生错误?

将项目导入 Eclipse 时禁用 Maven 项目构建器