【问题标题】:Wrapping chained method calls on a separate line in Eclipse for Java在 Eclipse for Java 中将链式方法调用包装在单独的行上
【发布时间】:2011-09-10 16:08:31
【问题描述】:

我还没有成功弄清楚如何将每个方法调用包装在Eclipse 中。例如,我有这个:

someObject.A().B().C();

但我真的很想要这个:

someObject.A()
          .B()
          .C();

Eclipse 的“换行”部分下似乎没有给我这个结果。

【问题讨论】:

  • 几年过去了,我仍然认为 Eclipse 在这方面做得不好。答案都有不必要的副作用或无法完成工作。我也没有答案(所以我不会发布),但我的解决方法是用 cmets 结束每一行: someObject.A() // (new line) .B() // (new line) 。C();哪个有效。

标签: eclipse line


【解决方案1】:

窗口→首选项→Java→代码样式→格式化程序→编辑→换行→永远不要加入已经换行的行

【讨论】:

  • 对不起,我没有解释:它不会格式化。如果您手动操作,它根本不会搞砸。
  • 我现在明白了。 Eclipse 不能真正格式化链式方法,但它会保留我输入的格式。谢谢。
  • 没有特定于链式调用的内容。如果你强制函数调用包装,它会到处包装
  • @Johann 不正确,Eclipse 可以格式化链式方法调用。
  • @OpDeCirkel 您应该在答案本身中添加您的评论。让人们更容易注意到它:这条评论I am sorry i did not explain: It won't format it. It will simply not mess it up, if you do it manually. –
【解决方案2】:

在:Window->Preferences->Java->Code Style->Formater->Edit->Line wrapping->Function call->Qualified invocation

选择缩进策略作为列上的缩进

【讨论】:

    【解决方案3】:

    对于那些将 Eclipse 代码格式设置签入源代码控制的人(以确保整个团队的代码格式一致),.settings 文件夹已签入。

    .settings/org.eclipse.jdt.core.prefs 文件中提供了这种格式化行为的属性。

    属性是:

    org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=80
    

    【讨论】:

      【解决方案4】:

      在 java 和 javascript 中自定义您的 eclipse 格式化程序。增加适合您屏幕的最大线。

      【讨论】:

        【解决方案5】:

        补充 Deepak Azad 的回答,您真正需要的是以下内容:

        Windows:窗口 → 首选项 → Java → 代码样式
        → 格式化程序 → 编辑 → 换行(选项卡)

        Mac OS:ADT → 首选项 → Java → 代码风格
        → 格式化程序 → 编辑 → 换行(选项卡)

        然后,在左侧的列表中,选择:

        函数调用 → 合格的调用

        现在在此列表下方,将换行政策设置为:

        包装所有元素,如果不需要,第一个元素除外

        检查

        强制分割,即使线短于最大线宽

        最后,将缩进策略设置为(感谢@Turbo):

        在列上缩进

        它应该为您提供您所要求的确切行为。


        奖励:Android Studio / IntelliJ Idea:

        Mac OS:Android Studio → Preferences (Cmd +,) → Editor → Code Style → Java → Wrapping And Braces 选项卡 → 链式方法调用

        选择

        总是换行

        然后检查

        多行对齐

        【讨论】:

        • 谢谢。这不适用于return new SomeClass().A().B().C();,每个方法调用都在单独的行上。
        • @ChristianGarcía +1 以获得最佳答案。我的一个观察(Eclipse 霓虹灯):当我设置Indent on column 时,它有时会增加额外的空间;例如 session.createQuery 变为 session .createQuery 等等。恢复到默认选项对我来说解决了问题。
        • 这会在第一次调用之后插入一个标签。为了避免这种情况,我不得不在缩进下检查“使用空格缩进换行”。
        • 正如@DanielNitzan 提到的,这将插入标签。我通过不将缩进策略设置为“缩进一个”而不是“在列上缩进”来解决这个问题。这使得函数调用一个新行将比语句的开头缩进一个选项卡,而不是挂在页面中间
        • 我没有看到 缩进策略 :(* Eclipse 2018-12 (4.10.0)
        【解决方案6】:

        如果您愿意自己对这些段进行格式化,则可以使用以下方法防止 eclipse 重新格式化这些段:

        // @formatter:off
        ...
        // @formatter:on
        

        您可能需要在首选项中启用此功能: http://archive.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/eclipse-news-part2.html#JavaFormatter

        另请参阅: How to turn off the Eclipse code formatter for certain sections of Java code?

        【讨论】:

          【解决方案7】:

          Window > Preferences > Java > Code Style > Formater > Edit > Line wrapping > Function Calls,将“Line wrapping policy”设置为“Wrap all elements, each element on a new line”。

          【讨论】:

          • 这将使每个函数调用都换行,即使它们没有被链接,如果你用 Ctrl+Shift+f 格式化你的文件,它会搞砸一切\
          • 其他政策也可用,例如“包装所有元素,如果没有必要,除了第一个元素”。其中一个应该适合你:)
          猜你喜欢
          • 2016-11-30
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多