【问题标题】:How do I modify the set method signature that Eclipse auto generates?如何修改 Eclipse 自动生成的 set 方法签名?
【发布时间】:2010-11-20 11:14:55
【问题描述】:

我当前的项目有一个编码约定,即从不使用 this 引用实例变量。前缀,并且参数永远不应该隐藏实例变量。

这导致设置器看起来像:

public void setFoo(final Foo aFoo)
{
  foo = aFoo;
}

不幸的是,eclipse 默认不会为我生成。 我发现在代码样式中我可以通过在参数前缀列表中添加 a 来接近它,但是我只希望它应用于 set 方法,并且我也想在那里添加最终标记。

有没有办法使用模板来实现这一点?其他配置?

【问题讨论】:

    标签: java eclipse templates setter


    【解决方案1】:

    我认为目前为 setter 方法应用参数前缀的唯一方法是为 setter 方法编写一个新模板,但访问器生成器不会使用此模板。您可以在Window->Preferences->Java->Editor->模板,有关创建模板的一些提示,请参阅question

    您可以修改 Eclipse 设置以在工作区或项目级别为所有类型的变量指定前缀(和后缀),但这将适用于所有方法,而不仅仅是 setter。您可以使用“清理”功能来确保您的参数是最终的。

    为了满足您的代码约定,您可以指定所有实例变量都带有前缀,这样您的参数就不会覆盖实例变量,但您可能不想这样做。


    变量前缀

    要修改工作区设置,请转到窗口->首选项->Java->代码样式 ,然后编辑列表以使用您的首选前缀/后缀。

    要修改项目设置,打开项目属性(Alt + Enter),然后选择Java Code Style,选择启用项目特定设置,然后编辑工作区的首选项。

    要仅为 setter 方法启用特定前缀,您必须深入研究代码模板的内部结构以识别和修改 setter


    最终参数

    为确保所有方法参数都是最终的,您可以修改 Java 清理处理器以将 final 添加到参数中。在 Window->Preferences->Java->代码样式->清理下>,您可以复制或编辑活动配置文件。在代码样式标签下,在变量声明部分选择Use modifier 'final' where possible,然后确保Parameter 被选中。运行 Source->Clean Up

    时将应用清理

    要在每次保存时自动应用最终参数,您可以在 Window->**Preferences->Java->Editor 下修改保存操作->Save Actions,确保选中Perform the selected actions on save 框(如果您愿意,这也会格式化您的代码并组织导入),选择Additional Actions 选项,Configure,然后在 Code Style 下,应用同上

    【讨论】:

    • 这是一个很好的答案,但它基本上是在说“不,你不能在不修改所有其他自动生成的方法签名的情况下修改 eclipse 自动生成的 getter 和 setter 方法签名的格式”,这两者都是鉴于其模板机制的深度,令人失望和惊讶。不过,感谢您提供有关解决方法的详细信息,我相信他们会帮助后来的人
    • 是的,恐怕没有办法在默认情况下完全按照您的意愿行事。但是 Eclipse 允许您为实例变量添加前缀并使用“this.”,因此在我看来这是一个合理的省略。不幸的是,您的编码标准陷入了差距。请注意,您可以将参数设为最终参数,因此您有一个部分解决方案。
    • +1 用于变量前缀参考,不知道这是可能的。
    【解决方案2】:

    Eclipse --> 首选项 --> Java --> 代码样式 --> 代码模板 --> 代码

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        很简单……

        1. 在您的项目中,在根项目文件夹下,创建一个名为 .settings 的文件夹(它可能已经存在)。
        2. 在此文件夹中,创建一个名为org.eclipse.jdt.core.prefs 的文本文件
        3. 在此文件中,包含以下行:

        org.eclipse.jdt.core.codeComplete.argumentPrefixes=a

        就是这样,大功告成。它应该可以工作。我找不到合适的文档,但这里有一些您可以设置的其他选项:

        org.eclipse.jdt.core.codeComplete.argumentPrefixes= org.eclipse.jdt.core.codeComplete.argumentSuffixes= org.eclipse.jdt.core.codeComplete.fieldPrefixes= org.eclipse.jdt.core.codeComplete.fieldSuffixes= org.eclipse.jdt.core.codeComplete.localPrefixes= org.eclipse.jdt.core.codeComplete.localSuffixes= org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=

        【讨论】:

        • 我没有尝试过,但看起来它会配置所有生成的代码,而不仅仅是 setter 和 getter 方法签名。它只是另一个答案的直接编辑版本吗?或者它做了什么不同的事情?
        • 是的,差不多就是这样。
        猜你喜欢
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 2012-05-09
        • 2013-05-17
        • 1970-01-01
        相关资源
        最近更新 更多