【问题标题】:In Eclipse, how do I change the default modifiers in the class/type template?在 Eclipse 中,如何更改类/类型模板中的默认修饰符?
【发布时间】:2009-10-23 08:02:44
【问题描述】:

Eclipse 的新类型默认模板(Window > Preferences > Code Style > Code Templates > New Java Files)如下所示:

${文件评论} ${package_declaration} ${类型评论} ${type_declaration}

创建一个新类,它看起来像这样:

package pkg;

import blah.blah;

public class FileName {
    // Class is accessible to everyone, and can be inherited 
}

现在,我坚信应该尽可能限制访问,除非明确允许,否则应该禁止继承,所以我想更改 ${type_declaration} 以将所有类声明为 final 而不是比public:

package pkg;

import blah.blah;

final class FileName {
    // Class is only accessible in package, and can't be inherited
}

说起来容易做起来难。我发现谷歌搜索的唯一内容是 2004 question on Eclipse's mailing list 没有得到答复。

所以,简而言之:如何更改 Eclipse 中的默认类/类型修饰符?

如果重要的话,我正在使用 Eclipse Galileo (3.5)。

【问题讨论】:

    标签: java eclipse coding-style templates


    【解决方案1】:

    看起来不可能。 ${type_declaration} 是内部的东西。

    您可以做的是每次单击“新建 Java 类”对话框中的最后一个复选框。但这不是你想要的。

    【讨论】:

      【解决方案2】:

      只需在使用新建类向导创建新类时检查适当的访问修饰符即可。

      New Java Class Wizard

      【讨论】:

      • 这就是我今天所做的。问题是它不记得我的选择,所以我时不时忘记做。
      • @gustafc 如果您忘记了,可以让 Checkstyle 警告您。
      【解决方案3】:

      好的,我认为没有什么很酷的答案,那么那个“hack”呢?

      ${filecomment}
      ${package_declaration}
      
      ${typecomment}
      import invalid;/* ${type_declaration} */
      
      final class ${type_name} { }
      

      如果你现在点击 Control + Shift + O 来组织导入,旧的类型声明就会消失。您还可以添加组织导入以将操作保存到自动化。

      我知道这很糟糕,但它可以满足你的需求。

      【讨论】:

      • 嗯...有趣的想法。不幸的是,它随后将所有内容声明为final class,包括接口、枚举等,并且它错过了我在向导中声明的所有超类/接口。我还必须在评论中包含${type_declaration},因为没有它就无法保存模板。
      【解决方案4】:

      也许这会对你有所帮助?

        eclipse\plugins\org.eclipse.jdt.ui_*.jar\templates\
      

      Eclipse custom variable for java code templates

      【讨论】:

      • 并非如此,它似乎只是 eclipse 获取模板的地方。 ${type_declaration} 不存在。我开始怀疑它是生成的而不是声明的。
      【解决方案5】:

      这是我的解决方法:

      编辑模板:

      ${filecomment}
      ${package_declaration}
      
      ${typecomment}   
      final class ${type_name} {
      
          /* ${type_declaration} //delete */
      
          /** 
           * @see {@link Object#toString()}
           * @return String representation of this instance. 
           */
          public String toString() {
              return "some impl";
          }
      
      }
      

      注释掉 ${type_declaration} 因为它是必需的。您有评论要删除,但已达到要求。抱歉,如果这是一个 2 年前的主题,但对我来说它仍然相关。

      【讨论】:

        猜你喜欢
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多