【问题标题】:Naming convention for instances of java.util.Comparatorjava.util.Comparator 实例的命名约定
【发布时间】:2018-04-23 21:09:58
【问题描述】:

假设有一个类股票

  class Stock
  {
    String id;
    String name;
  }

我想创建两个比较器,分别通过idname 进行比较。 Java 中的比较器是否有命名约定或最佳实践?

以下名字可以吗?

  • StockByIdComparatorStockByNameComparator
  • SortStockByIdSortStockByName

我知道在某些领域避免使用冗余名称。一个会选择 List<Stock> stocks 超过 List<Stock> stockList。此外,类型不应该以变量名编码(也许是因为 IDE 的兴起?)。但也有清晰的重要维度。

那么命名比较器的好方法是什么?

【问题讨论】:

  • 你真的需要给它们命名吗? Comparator.comparing(Stock::getName) 还不够吗?我的意见是,您的第一个选择要好得多。您的第二个选项不是名称,而是动词,适用于方法,而不是对象。

标签: java naming-conventions comparator naming


【解决方案1】:

就我个人而言,我会将它们命名为StockByIdComparatorStockByNameComparator
它可能看起来有点多余,但很清楚,因为每个 Java 开发人员都知道Comparator 是什么。

我不喜欢SortStockByIdSortStockByName那样

  • 它们看起来像方法名称:以动词开头,后跟补语。

  • 我不知道这些是Comparator 实现。

我不认为选择与Comparator 接口相结合的名称是一个问题或错误的命名策略。
相反,它是一个接口,是 Java 基础 API 的一部分。

【讨论】:

    【解决方案2】:

    如果您将它们创建为一个类,我会在其中包含 Comparator

    class StockByIdComparator implements Comparator<Stock> {}
    

    如果您想将其创建为变量或常量 - 您可以跳过它

    static final Comparator<Stock> COMPARE_BY_ID = new Comparator<Stock>() {}
    

    应该是这样的

    Collections.sort(stocks, COMPARE_BY_ID);
    

    【讨论】:

      【解决方案3】:

      StockByIdComparatorStockByNameComparator 没问题,因为它们描述了这些类的用途。但我会将它们分别命名为StockComparatorByIdStockComparatorByName,因此它们将有一个通用前缀。所以以后你可以轻松找到所有StockComparator*

      基本上,没有任何命名比较器或其他接口实现的最佳实践。好的方法是选择描述性且不是很长的名称,并将此名称与所有代码保持“约定”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 2011-12-21
        • 2020-01-14
        • 2020-08-30
        • 1970-01-01
        相关资源
        最近更新 更多