【问题标题】:Can I Define Exceptions to Eclipse cleanup rules?我可以定义 Eclipse 清理规则的例外吗?
【发布时间】:2008-10-06 09:15:30
【问题描述】:

大多数情况下,Eclipse 中的清理规则(首选项 > Java > 代码样式 > 清理)可以完美运行并创建漂亮的代码。

但有时,尤其是使用 cmets 和串联字符串 sn-ps(如内联 SQL 查询)时,清理只会把事情搞砸,并破坏我的格式。

有没有办法对 Eclipse 说“不要碰这块文本!我已经按照我喜欢的方式对其进行了格式化,你会让它变得不那么可读”? p>

【问题讨论】:

  • 我不知道答案。但是当我不想重新格式化完整的文档时,我通常只格式化一部分。首先,我选择线条;然后我按 Ctrl-Shift-F。文件的未选择部分未修改,:-)
  • 致问题作者:您可能应该将接受的答案切换为MPi's answer,因为该功能最近已添加到 Eclipse。

标签: java eclipse


【解决方案1】:

我假设您的意思并不是真正的“清理”,而是隐藏在其中的“格式化源代码”选项。它在 Preferences > Java > Code Style > Formatter 中配置。而且,确实,有一个名为“开/关标签”的选项。可悲的是,默认情况下它是关闭的。你现在可以这样写:

// @formatter:off
StringBuilder sql = new StringBuilder()
    .append("SELECT whatever \n")
    .append("FROM some_table");
// @formatter:on

在撰写本文时,接受的答案很可能是正确的,但是,如果我没记错的话,这是在 Eclipse 3.5 中引入的。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,虽然我没有解决方案,但我可以告诉你我是如何解决这个问题的。

    由于格式化的工作原理,我特意避免使用过长的代码行。一般来说,当我保持简短的行时,它会更好地决定如何格式化代码。这甚至可以用于 SQL 语句,例如:

    public static final String SELECT_SOMETHING = "SELECT"
            + "OBJECTID, THIS, THAT, THEOTHER, THING"
            + " FROM DBNAME.DBSCHEMA.TABLE_T"
            + " WHERE ID = ?";
    

    此语句的格式合理,因为在可能的情况下将项目分开并连接在一起。如果我不这样做,我会得到不可预测的结果:

    public static final String SELECT_SOMETHING = "SELECT OBJECTID, SOMETHING FROM DBNAME.DBSCHEMA.TABLE_T WHERE ID = ?";
    

    对于 cmets,我尽可能将它们全部放在一行上,并在它进行格式化时允许它自动换行。

    此外,可以使用代码格式化程序更改样式,以使代码更适合您的编码样式。您可能希望团队中的每个人都使用相同的格式,以避免冲突。因为使用您的源代码控制工具与其他开发人员或以前的版本比较更改更容易,即使它使您的部分代码可读性降低,使用格式化程序仍然是我的优势。

    不过,当格式化程序做出错误决定时,我理解您的沮丧!

    【讨论】:

      【解决方案3】:

      对回答我自己的问题感到不确定,但我目前有一个解决方法(注意:我有这些清理规则作为保存操作):

      保存(使用 Ctrl/Cmd-S,不知道保存方式是否重要)代码,让 Eclipse 弄乱您的格式。然后只需按 Ctrl/Cmd-Z 即可撤消,并立即重新保存。格式恢复为原始格式,并且似乎按预期保存。

      【讨论】:

        【解决方案4】:

        对于代码中的 SQL 语句,您可以在每行的末尾放置一个单行注释字符。然后格式化程序无法重新格式化它。比不用做更难看,但比 Eclipse 格式化更漂亮。

        StringBuffer sql = new StringBuffer() //
           .append("SELECT whatever \n") //
           .append("FROM some_table");
        

        【讨论】:

          【解决方案5】:

          没有。 (据我所知,我也遇到过同样的问题,并且看起来很辛苦而且很长时间......)

          【讨论】:

            【解决方案6】:

            (仅适用于 Javadoc cmets)

            如果我的文本块的格式符合我的喜好,我会用

             标记将它们括起来。
                

            【讨论】:

              【解决方案7】:

              如果您不希望某个字段成为最终字段(i.i:因为您想在调试时更改它),您只需在构造函数中将其分配给自身。这会收到日食警告,但您的领域将保持非最终状态。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-04-07
                • 1970-01-01
                • 1970-01-01
                • 2011-01-21
                • 1970-01-01
                • 2015-02-03
                相关资源
                最近更新 更多