1

考虑这个代码片段

StringBuilder sb = new StringBuilder();
sb.append(1).append(2).append(3).append(4).append(5).append(6).append(7).append(8).append(9);

假设我们想使用 Eclipse 格式化程序来格式化它,行长度限制很短,所以它在 StackOverflow 上看起来不错。我们可能希望得到这样的东西:

StringBuilder sb = new StringBuilder();
sb.append(1).append(2).append(3).append(4)
    .append(5).append(6).append(7).append(8)
    .append(9);

相反,它根本不会被包装,因为显然格式化程序不知道允许打破“点”。事实上,即使我自己包装它,然后告诉它格式化它,它也会撤消我的包装。当函数调用带有两个参数时,情况会变得更糟,因为它会认为:啊哈!我可以在逗号后休息。结果看起来很糟糕,我什至不想在这里展示它。

现在,诚然,有一些变通方法,例如//@formatter:off,甚至还有一些相当轻量级的方法,例如

StringBuilder sb = new StringBuilder();
sb.append(1).append(2).append(3).append(4)//
    .append(5).append(6).append(7).append(8)//
    .append(9);

注释充当“障碍”以防止其合并行。但这都是“与格式化程序作斗争”。无论如何,我是否让它与我一起工作而不是反对我?(可能正确的做法是告诉它保留所有换行符,但我不禁觉得它仍然应该能够引入缺少的换行符,即使开发人员将它们排除在外。)

鉴于当前的功能集,这是格式化程序可以做的吗?

4

0 回答 0