Eclipse Java格式化程序中的换行问题

3

我正在尝试将Java代码格式化器配置为紧凑的格式。我已经将策略设置为“必要时换行”,并将最大行宽设置为80,但它要么在不应该折行的地方折行,要么在应该折行的地方不折行...下面是一个示例:

// -------------------------------------------------------------------------80->
public class FormatterTest {
    void test() {
        int i, a = 1, b = 1, c = 1, d = 1;
        i =
                a
                        * b
                        * c
                        * d
                        * (100000000 + 100000000 + 100000000 + 100000000
                                + 100000000 + 100000000 + 100000000 + 100000000 + 100000000);
    }
}
// -------------------------------------------------------------------------80->

And what I'd like:

    i = a * b * c * d * (100000000 + 100000000 + 100000000 + 100000000
            + 100000000 + 100000000 + 100000000 + 100000000 + 100000000);

感谢您的帮助。

你为哪种语句设置了自动换行? - Kent
如果像Eclipse中的现代代码格式化程序无法正确格式化代码,我会这样想。这可能意味着代码存在问题,应该通过改进代码来解决此问题,而不是依靠格式化程序。 - Rangi Lin
我不知道Eclipse是否现代化,但它的格式化程序无法格式化简单的表达式。我认为这太容易假装是我的代码了。我在其他项目中也遇到了同样的问题。 - Patrick
3个回答

1

如果在行末添加//,您可以抑制格式。

i = a * b * c * d * (100000000 + 100000000 + 100000000 + 100000000 //
        + 100000000 + 100000000 + 100000000 + 100000000 + 100000000);

1
@Patrick:使用这种解决方法应该是绝对的例外。如果您需要大量使用它,那么您可能存在编码风格方面的问题。无论如何,在我看来,80个字符宽度在廉价的24英寸显示器时代已经不再流行了。 - Kai
1
@user714965 同意,我们有一个通用的格式化程序,将最大宽度设置为150。另外一种忽略格式化的替代方法是 //@formatter:off 和 //@formatter:on。 - Kent
问题完全相同(只是发生频率较低),当行宽设置为150时。 - Patrick

0

在你的评论中提到了“表达式”,但有不同类型的表达式。请查看截图。我认为它(右侧由Eclipse示例代码)看起来像是你想要的。

希望这对你有所帮助。

enter image description here

编辑

你能试一下吗?

 expressions-> Assignments :Do not wrap

抱歉,我尝试了不同的配置和不同类型的表达式,但是我无法得到正确的格式。在预览中它看起来没问题,但在我的代码中却不行(在我的示例中,所有表达式类型都已设置为必要的包装)。 - Patrick
有些表达式类型不需要设置包装。请检查我的更新。希望能帮到你。 - Kent
这有点好转,但并不明显,它仍然在不该换行的地方换行,在应该换行的地方则没有。无论如何还是谢谢。 - Patrick

0

我成功地在我的Eclipse中使用“Java Conventions [built-in]”格式设置将其格式化如下:

public class FormatterTest {
    void test() {
    int i, a = 1, b = 1, c = 1, d = 1;
    i = (a * b * c * d * (100000000 + 100000000 + 100000000 + 100000000
        + 100000000 + 100000000 + 100000000 + 100000000 + 100000000));
    }
}

由于某些原因,整个表达式周围的括号是必不可少的。如果没有它们,格式会完全不同。

希望这可以帮到你。


2
不错的技巧,但仍然是折中方案。恐怕格式有缺陷。 - Patrick

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