链式方法调用:如果长时间使用 constructors/functions 和许多参数会导致奇怪的效果,请砍掉?

Chained method calls: Chop down if long causes strange effects with constructors/functions with many parameters?

我喜欢在日常工作中使用 intellij idea,但是自从我进入新的 java 流和构建器之类的东西后,有一件事让我很烦恼。

当我将 java 代码样式设置 "Chained method calls" 设置为 "Chop down if long" 时,我的构造函数:

public Blog(Blog c) {
    this(c.getId(), c.getFromId(), c.getSiteId(), c.getUserId(), c.getTitle(), c.getFolder(), c.getAddedDate(), c.getFrontPos(), c.isUseSiteWidgets(), c
      .isNeedValidSubscriptionToView(), c.isMayStudentPostComments(), c.getLastIndexDate(), c.isCommentsEnabled(), c.isOverrideSiteSettings(), c
      .isNotifyOnComment(), c.isOnlyNotiftyOnUnapprovedComment());
  }

变为:

public Blog(Blog c) {
    this(c.getId(), c.getFromId(), c.getSiteId(), c.getUserId(), c.getTitle(), c.getFolder(), c.getAddedDate(), c.getFrontPos(), c.isUseSiteWidgets(), c
      .isNeedValidSubscriptionToView(), c
      .isMayStudentPostComments(), c.getLastIndexDate(), c.isCommentsEnabled(), c.isOverrideSiteSettings(), c.isNotifyOnComment(), c
      .isOnlyNotiftyOnUnapprovedComment());
  }

当我将 "Chained method calls" 设置为 "Do not wrap" 时,我的构建器方法调用变得非常混乱。来自:

getWizard().sendCommandToServer(CommandProtos.Wrapper.newBuilder()
          .setGetTutorSites(CommandProtos.GetTutorSites.newBuilder()
            .setEmail(loginUserForm.getEmail().getText())
            .setPass(new String(loginUserForm.getPass().getPassword()))
            .build())
          .build());

到一个班轮:

getWizard().sendCommandToServer(CommandProtos.Wrapper.newBuilder().setGetTutorSites(CommandProtos.GetTutorSites.newBuilder().setEmail(loginUserForm
          .getEmail().getText()).setPass(new String(loginUserForm.getPass().getPassword())).build()).build());

是否可以两全其美?换句话说,格式正确的 function/constructor 具有许多参数和格式正确的构建器。

我刚刚尝试了新想法 2018.4,似乎将 "Chained method calls" 设置为 "wrap always" 并禁用 "wrap first call" 和 "align when multiline" 是解决方案。

现在链和长构造函数格式正确。希望这对遇到类似问题的人有所帮助。

[编辑] 上面的代码工作得很好,直到你发现自己调用了类似的东西:

myclass.myfunc().myfunc()

这在使用 swing 时似乎很常见。以上设置导致:

myclass.myfunc()
.myfunc()

"Chained method calls" 到 "chop down if long" 并禁用 "wrap first call" 和 "align when multiline" 并将 "method call arguments" 设置为 "wrap if long" (长构造函数需要)这份工作。

每个模块的代码风格可能会解决很多这些问题,但它不在 intellij 中,但你可以投票: https://youtrack.jetbrains.com/issue/IDEA-69685