链式方法调用:如果长时间使用 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
我喜欢在日常工作中使用 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