链式方法调用:如果long导致具有许多参数的构造函数/函数的奇怪效果,则向下剪切?

时间:2018-05-09 08:04:05

标签: android-studio intellij-idea code-formatting

我喜欢在我的日常工作中使用intellij的想法,但是因为我进入了像流和构建器这样的新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方法调用”设置为“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());

是否有可能从两个世界中获得最佳效果?换句话说,正确格式化的函数/构造函数具有许多参数和正确格式化的构建器。

1 个答案:

答案 0 :(得分:0)

我刚刚尝试了新的想法2018.4,似乎将“链式方法调用”设置为“总是包装”并禁用“包装第一次调用”和“多行时对齐”是解决方案。

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

<强> [编辑] 上面的确很有效,直到你发现自己在调用类似的东西:

myclass.myfunc().myfunc()

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

myclass.myfunc()
.myfunc()

“链接方法调用”以“砍掉if if long”并禁用“wrap first call”和“align when multiline”并将“方法调用参数”设置为“wrap if long”(长构造函数需要)工作

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