【问题标题】:Code line wrapping - how to handle long lines代码换行 - 如何处理长行
【发布时间】:2011-04-13 09:36:58
【问题描述】:

我正面临一个 153 个字符长的特定行。现在,我倾向于在 120 个字符之后打破内容(当然,这在很大程度上取决于我所在的位置和当地的惯例。)但老实说,我在任何地方打破界限只会让它看起来很糟糕。所以我正在寻找一些关于我应该为此做些什么的想法。

这是行:

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper = new HashMap<Class<? extends Persistent>, PersistentHelper>();

我对如何/在哪里断线(以及为什么)以及缩短线本身的方法持开放态度。

我们不是 Java 商店,也没有此类事情的本地约定,或者显然我会简单地遵循它们。

谢谢!

【问题讨论】:

    标签: java coding-style conventions line-breaks


    【解决方案1】:

    一般情况下,我在 运算符之前换行,并在后面的行缩进:

    Map<long parameterization> longMap
        = new HashMap<ditto>();
    
    String longString = "some long text"
                      + " some more long text";
    

    对我来说,领先的运营商清楚地表达了“这条线是从其他东西延续下来的,它不是独立存在的”。当然,其他人有不同的偏好。

    【讨论】:

    • 作为相关评论:如果 Java 有 typedef 不是很好吗?
    • 是的,是的。我什至会满足于 &macros
    • 我同意在运算符之前的中断,除了赋值运算符,我发现当你的= 在第二行时更难阅读。很快 Java 就会拥有 Diamond 运算符 :)
    • 我想当我考虑这两者时,我什至更喜欢=。我想这只是一个品味问题,但当我看到它时,它是最有意义的。
    【解决方案2】:

    这就是我的做法,Google 按我的方式做。

    • 非赋值运算符的之前符号分开。
    • =, 的符号之后断开。

    在您的情况下,由于您使用的是 120 个字符,因此您可以在赋值运算符导致

    private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper =
            new HashMap<Class<? extends Persistent>, PersistentHelper>();
    

    在 Java 中,对于这种特殊情况,我会在中断后给出两个制表符(或八个空格),具体取决于制表符或空格是否用于缩进。

    这当然是个人喜好,如果您的项目有自己的换行约定,那么无论您喜欢与否,都应该遵循。

    【讨论】:

      【解决方案3】:

      恕我直言,这是写行的最佳方式:

      private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper =
              new HashMap<Class<? extends Persistent>, PersistentHelper>();
      

      这样增加的缩进没有任何大括号可以帮助您看到代码只是因为行太长而被拆分。而且不是 4 个空格,而是 8 个会更清楚。

      【讨论】:

      • 一行可以以操作符开头,但不能以它结尾,在本例中为=。检查 IDE 中的自动格式化。 NetBeans 肯定会更改此代码(经过测试)。
      • IDE 的默认设置与个人偏好或开发人员的建议无关。我知道有些人更喜欢在行首使用=,但是在声明类属性(或一般属性)的情况下,我认为代码已经足够清晰了(第二行的缩进应该更清楚)。
      • 澄清一下,这里没有对错,纯属审美和个人意见。
      • 如果可能的话,我宁愿对所有运算符都遵循相同的规则,当你想到+- 等运算符时,显然更容易阅读之前换行它们——就像你在一张纸上总结价值一样。我相信这就是为什么这种方法被普遍使用的原因。我提到 NetBeans IDE 作为示例,而不是作为预言机(双关语不是有意的)。我同意每个人都可能有自己的偏好,但是应该优先选择一个是常识,我相信这就是我们开始讨论它的原因。
      【解决方案4】:

      使用 Guava 的 Maps 静态工厂方法,长度仅为 105 个字符。

      private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper = Maps.newHashMap();
      

      【讨论】:

      • +1 好主意。如果你不想要额外的依赖,自己写这样一个静态工厂是很容易的。
      • 我不认为使用库来缩短行数是个好主意。
      • 我不建议为此目的包含它,但许多项目已经在使用它。正如 Helper Method 指出的那样,它是一种可以节省一些击键的单行。
      • 一个有趣的想法,显然这个方法就是针对这个问题引入的。
      • 您不应该只将 Google Guava 库用于静态工厂方法。您应该使用 Guava,因为它会在很多其他方面真正为您的 Java 代码质量做出贡献。 (更不用说由于谷歌在它上面花费的时间,它是邪恶的防弹......)
      【解决方案5】:

      我认为将最后一个运算符移到下一行的开头是一个好习惯。这样您就可以立即知道第二行的用途,即使它不是以运算符开头的。我还建议为以前损坏的选项卡设置 2 个缩进空格(2 个制表符),以使其与正常缩进不同。这在继续上一行时立即可见。因此我建议这样做:

      private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper 
                  = new HashMap<Class<? extends Persistent>, PersistentHelper>();
      

      【讨论】:

        猜你喜欢
        • 2021-03-01
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 2016-06-03
        • 1970-01-01
        • 2020-09-05
        • 2015-07-28
        • 1970-01-01
        相关资源
        最近更新 更多