考虑此代码段
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);
注释在其中充当“屏障”,以防止其合并行。 但是,这全都是“与格式化程序作斗争”。无论如何,我有办法与我合作而不是与我对抗吗? (也许正确的做法是只告诉它保留所有换行符,但我忍不住觉得它应该仍然能够引入遗漏的换行符,即使开发人员将其遗漏了。)< / p>
鉴于当前功能集,格式化程序可以执行此操作吗?