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


106

我有像这样的枚举:

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

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

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

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

Answers:


198

@wjans的答案对于普通枚举效果很好,但对于带有参数的枚举则无效。为了进一步扩展他的答案,以下是在Eclipse Juno中为我提供最明智的格式的设置:

  1. Window> Preferences> Java> Code Style>Formatter
  2. 请点击 Edit
  3. 选择Line Wrapping标签
  4. 选择enum声明树节点
  5. 设置Line wrapping policyWrap all elements, every element on a new line (...)现在它在括号中表示3分之3。
  6. 取消选中该选项Force split, even if line shorter than maximum line width (...),它现在在括号中显示3之3。
  7. 选择Constants树节点
  8. 检查一下 Force split, even if line shorter than maximum line width

这会将枚举treenode的3个子节点设置为相同的包装策略和相同的强制拆分策略(除了Constantstreenode 以外),因此带有参数的枚举将在各自的行上进行格式化。仅当参数超过最大行宽时,它们才会换行。

例子:

@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预览器中仍然看起来不对,但是当我在实际源上尝试它时,它就像一个魅力。谢谢。
本·瑟利

50

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

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

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

11

这也有点丑陋,但是如果您的公司政策禁止您更改格式器,则可以在不想被换行的行末添加注释。

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

5

这不是很好,但是您可以关闭部分代码的Eclipse格式化程序...

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

该选项位于Windows->首选项-> Java->代码样式->格式化程序->编辑->关闭/打开标签面板中


1
这很有效。编译器现在认为它是错误。将它们放在注释中可以克服// // formatter:off这样的问题
Bob Kuhar,2012年

4

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

将包装政策设置为

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

  • 选中“强制拆分,即使行短于、、、、

0

只需添加最新的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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.