【问题标题】:How to stop Eclipse formatter from placing all enums on one line如何阻止 Eclipse 格式化程序将所有枚举放在一行上
【发布时间】:2011-10-04 07:32:43
【问题描述】:

我有这样的枚举:

public static enum Command
{
login,
register,
logout,
newMessage
}

格式化文件时,输出变为:

public static enum Command 
{
login, register, logout, newMessage
}

【问题讨论】:

  • 外部格式化程序(org.eclipse.jdt.core.formatter......)中是否有任何变量可以在单独的行中强制每个枚举变量?

标签: java eclipse formatter


【解决方案1】:

您可以在格式化程序首选项中指定:

  • 首选项:Java -- 代码风格 -- 格式化程序
  • 点击编辑
  • 选择“换行”选项卡
  • 选择“枚举”声明 -> 左侧框中的常量
  • 将换行策略设置为“将所有元素换行,每个元素都换行”
  • 选中“强制拆分...”

【讨论】:

  • 我有这个问题好几个月了。我没有尝试的是“强制拆分”。不知道为什么需要它,因为您认为“包装所有元素”实际上会包装所有元素!感谢您的解决方案。
【解决方案2】:

这不太好,但您可以为某些代码部分关闭 Eclipse 格式化程序...

// @formatter:off
public static enum Command {
    login,
    register,
    logout,
    newMessage
};
// @formatter:on

该选项在 Windows->Preferences->Java->Code Style->Formatter->Edit->Off/On Tags 面板中

【讨论】:

  • 这行得通……有点。编译器现在认为这是一个错误。将它们放入 cmets 可以解决这个问题,例如 // @formatter:off
【解决方案3】:

您需要在“常量”的枚举声明下设置换行策略。

将包装策略设置为

  • 包装所有元素,每个元素换行

  • 选中“强制拆分,即使行短于,,,,,, 的复选框

【讨论】:

    【解决方案4】:

    它也有点难看,但是如果您的公司政策阻止您更改格式化程序,您可以将 cmets 放在您不想被包装的行的末尾。

    public static enum Command 
    {
        login,//
        register,//
        logout,//
        newMessage//
    };
    

    【讨论】:

      【解决方案5】:

      @wjans 的答案对于普通枚举工作正常,但不适用于带参数的枚举。为了稍微扩展他的答案,以下是在 Eclipse Juno 中为我提供最合理格式的设置:

      1. Window > Preferences > Java > Code Style > Formatter
      2. 点击Edit
      3. 选择Line Wrapping 标签
      4. 选择enum声明树节点
      5. Line wrapping policy 设置为 Wrap all elements, every element on a new line (...),因此现在括号中显示的是 3 of 3。
      6. 取消选中 Force split, even if line shorter than maximum line width (...),因此现在括号中显示的是 3 of 3。
      7. 选择Constants树节点
      8. 检查Force split, even if line shorter than maximum line width

      这会将枚举树节点的 3 个子节点设置为相同的包装策略,以及相同的强制拆分策略(Constants 树节点除外),因此您的带参数的枚举将在各自的行中格式化。参数只有在超过最大线宽时才会换行。

      示例:

      @wjans

      enum Example {
          CANCELLED,
          RUNNING,
          WAITING,
          FINISHED
      }
      
      enum Example {
          GREEN(
              0,
              255,
              0),
          RED(
              255,
              0,
              0)
      }
      

      上述解决方案:

      enum Example {
          CANCELLED,
          RUNNING,
          WAITING,
          FINISHED
      }
      
      enum Example {
          GREEN(0, 255, 0),
          RED(255, 0, 0)
      }
      

      【讨论】:

      • 在 Eclipse 预览器中对我来说仍然看起来不对,但是当我在实际源代码上尝试它时,它就像一个魅力。谢谢。
      【解决方案6】:

      只需添加最新的 Eclipse 2018.9

      1. Window > Preferences > Java > Code Style > Formatter - Edit
      2. 展开Line Wrapping树节点。
      3. 展开Wrapping settings
      4. 展开'enum' declaration
      5. 编辑ConstantsConstant arguments

      常量必须是Wrap all elements, every element on a new line。 常量参数必须是Wrap where necessary

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 1970-01-01
        • 2014-06-28
        • 2015-11-27
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        相关资源
        最近更新 更多