如何停止Eclipse格式化程序将所有枚举放在一行上

113

我有像这样的枚举:

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

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

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

3
在外部格式化程序(org.eclipse.jdt.core.formatter......)中是否有变量可以强制每个枚举变量单独成行? - Paramesh Korrakuti
7个回答

210

对于普通枚举项,@wjans的答案可以正常工作,但对于带有参数的枚举项则不行。为了更详细地解释他的答案,以下是在Eclipse Juno中设置最合理格式的步骤:

  1. 窗口 > 首选项 > Java > 代码样式 > 格式化程序
  2. 点击 编辑
  3. 选择 换行 选项卡
  4. 选择 enum 声明树节点
  5. 换行策略 设置为 每个元素都换行,每个元素在新行上(...),因此现在在括号中显示 3 of 3
  6. 取消选中 强制分割,即使行短于最大行宽 (...),因此现在在括号中显示 3 of 3
  7. 选择 常量 树节点
  8. 选中 强制分割,即使行短于最大行宽

这将把枚举树节点的3个子节点设置为相同的换行策略和相同的强制分割策略,除了 常量 树节点之外,因此带有参数的枚举项会被格式化为单独的行。只有当参数超过最大行宽时才会换行。

示例:

@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)
}

1
在Eclipse的预览器中仍然看起来不对,但当我在实际源代码上尝试时,它像魔法般地运行。谢谢。 - Ben Thurley
2
谢谢,你能发布一个eclipse-codeformatter.xml的相应XML标记吗? - Tob

51

您可以在格式化偏好设置中指定此选项:

  • 偏好设置:Java -- 代码风格 -- 格式化程序
  • 单击“编辑”
  • 选择“换行”选项卡
  • 在左侧的框中选中“enum”声明 -> 常量
  • 将行包装策略设置为“每个元素都换行包装”
  • 勾选“强制拆分...”

我遇到了这个问题好几个月了。我没有尝试的方法是“强制分割”。不确定为什么需要这样做,因为你会认为“包装所有元素”实际上应该包装所有元素!感谢您提供的解决方案。 - LegendLength

11

如果你的公司政策不允许更改格式化程序,那么这种方法也有点丑陋。但是你可以在不想被换行的行末加上注释。

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

6

虽然不太好,但你可以关闭Eclipse格式化程序来处理一些代码部分...

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

这个选项位于Windows->Preferences->Java->Code Style->Formatter->Edit->Off/On Tags面板中。


1
这个可以⋯⋯有点儿。编译器认为它是一个错误。把它们放在注释中就可以解决这个问题,如// @formatter:off。 - Bob Kuhar

4

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

将换行策略设置为:

  • 换行所有元素,每个元素单独一行

并且

  • 勾选“强制拆分,即使行比指定宽度短”的复选框

2

只需添加最新的Eclipse 2018.9版本。

  1. 窗口 > 首选项 > Java > 代码风格 > 格式化程序 - 编辑
  2. 展开换行树节点。
  3. 展开换行设置
  4. 展开'枚举'声明
  5. 编辑常量常量参数

常量需要每个元素都要换行。 常量参数需要必要时换行


1

厉害,有没有线索知道这些值对应的文档在哪里? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接