Eclipse格式化程序选项:'.'对齐(Java)

14

我希望Eclipse可以格式化调用构建器的一些代码,如下所示:

final Item item = new Item.Builder()
                          .name("something")
                          .field("a value")
                          .build();
即以第一行的'.'字符为对齐点。我可以通过手动对其第二行(.name("something"))来说服Eclipse这样做,但是任何自动格式化都会破坏这种对齐方式。
我已经尝试过Eclipse中所有可以找到的各种格式选项,但似乎没有一个可以满足我的需求。有没有什么想法可以用格式选项以这种方式布置代码?

个人认为这是一种不好的格式化代码的方式。如果你将item重命名为carPart,那么你的格式化就会出错,或者你必须修改所有后续行。如果你在一个团队中,并且使用SCM,那么这将是一个丑陋的检入,因为你触及了与你实际更改无关的行。这在你的个人项目中不是问题,但在生产问题之后试图确定更改时,当老板在你脖子后面喘气时,这将是一个大问题。 - hidralisk
如果不允许行具有无限长度,那么任何线条长度的变化都可能对后续线条产生连锁反应,因此我不认为这是一个特殊情况。而且,如果您按照您所说的方式进行重构,那么应该将其作为单独的提交进行,以使其与任何其他代码更改分开。 - user1596371
3个回答

5
在点的位置上精确对齐是不可能的,但每个方法调用的换行可以自动完成。我已经创建了这个输出。
void format() {
    Test test = new Test()
            .a()        // this call can also be configured to be one line above
            .b()
            .c();
}

通过在格式化器设置中选择“换行线路”选项卡,选择“函数调用、限定调用”,将组合框中的“换行策略”切换为“包装所有元素,每个元素都在新行上”,最后勾选复选框“即使行短于最大行宽度也要强制拆分”,可以完成代码格式的设置。
如果选择“...除第一个元素外”的策略,则可以将第一个方法调用放在第一行。

你能试一下这个吗: private static String getErrorMessage(final MyFile file) { return new StringBuilder(ERROR_MESSAGE).append(" ").append( file.getDataType()).append(" ").append(FILE_NAME).append( file.getFileNameNoPathNoSuffix()).toString(); } 我认为你会发现结果非常丑陋 - 至少在Eclipse Luna上是如此。你用的是哪个版本? - Adam

0

我认为,你可以使用“jalopy”来实现这个目标。如果你使用Maven,有一个插件可用。

如果你想要使用jalopy,那么你会感兴趣的设置是在alignment元素中的<methodCallChain>,你应该将其值设置为true

编辑:maven jalopy plugin。请确保你针对clean阶段,并使用format目标。


0
创建一个新的格式化程序:
属性 -> 格式化程序 -> 配置工作区设置 -> 新建
然后在选项卡“开/关标签”上设置“启用开/关标签”
然后只需像这样包围您的代码:
/* @formatter:off */
final Item item = new Item.Builder()
                          .name("something")
                          .field("a value")
                          .build();
/* @formatter:on */

感谢您的回复。不幸的是,我有大量格式不良的代码,我希望Eclipse按照问题中的标准进行格式化,而不是手动执行。 - user1596371

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