生成器模式的 Eclipse 格式化程序设置

2022-08-31 22:27:31

我对一系列限定调用的 Eclipse 格式规则(即 Builder 模式样式)感到非常沮丧。例如,以下是我对一些创建新的Apache Commons CLI对象的代码的首选格式:Options

  Options options = new Options()
      .addOption(OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit")
      .addOption(OptionBuilder.withLongOpt(OPTION_PROPERTIES)
                     .hasArg()
                     .withArgName("FILE")
                     .withType(File.class)
                     .withDescription("specify a user properties file")
                     .create());

即,如有必要,参数被包装和缩进,并且除第一个调用之外的所有限定调用(除非必要)如果有多个调用,则被包装并缩进。如果参数列表包装在限定的调用中,则调用应首先包装。

Eclipse 中的默认格式(参数和调用的“仅在必要时换行”)会产生以下混乱:

  Options options = new Options().addOption(
      OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit").addOption(
          OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
              "FILE").withType(File.class).withDescription(
              "specify a user properties file").create());

进入“Java代码样式 ->格式化程序 ->换行”,并将换行设置为“如有必要,请包装除第一个元素以外的所有元素”,结果如下:

  Options options = new Options().addOption(
      OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
      .addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
          "print version and exit")
      .addOption(
          OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
              "FILE").withType(File.class).withDescription(
              "specify a user properties file").create());

我不喜欢表达式没有被包装,或者没有包装就被包装了。OptionBuilder"FILE"withArgName

将缩进更改为“列上的缩进”将得到:

  Options options = new Options().addOption(OPTION_HELP_SHORT, OPTION_HELP,
                                     false, "print usage information")
                                 .addOption(OPTION_VERSION_SHORT,
                                     OPTION_VERSION, false,
                                     "print version and exit")
                                 .addOption(
                                     OptionBuilder.withLongOpt(
                                                      OPTION_PROPERTIES)
                                                  .hasArg()
                                                  .withArgName("FILE")
                                                  .withType(File.class)
                                                  .withDescription(
                                                      "specify a user properties file")
                                                  .create());

它打破了我想要的界限,但把事情推得太远了。

有没有办法说服Eclipse应用我的首选格式样式或比上述任何一种更接近它的东西?


答案 1

关闭带批注的格式设置或插入行批注太乏味。

最好的方法如下所述:

...或者,您可以全局选择“换行>从不加入已换行”。然后,您可以手动中断它,格式化程序将仅设置行内格式(或在必要时添加其他换行符)。

使用此设置,Eclipse 格式化程序将停止破坏您的构建器语句。

enter image description here


答案 2

使用注释:

   Object o = foo() //
      .bar() //
      .toString();

推荐