Java 实用程序类的变数命名原则

在用 Java 编写实用工具类时,有哪些好的指导方针可以遵循?

包应该是“ util”还是“ utils”?是 ClassUtil 还是 ClassUtils?什么时候类是“辅助工具”或“实用程序”?实用程序还是实用程序?还是混合使用?

标准的 Java 库同时使用 Utils 和 Utitility:

  • Javax 秋千,实用程序
  • 属性
  • Plaf.basic. BasicGraphicsUtils

Apache 使用各种 Util 和 Utils,但大部分是 Utils:

  • Comms.deler.util.DomUtil
  • Org.apache.commons.modeler.util. IntrospectionUtils
  • Org.apache.commons.io 文件系统实用程序
  • Org.apache.lucene.wordnet. AnalyzerUtil
  • Org.apache.lucene.util. ArrayUtil
  • Xmlparser.DOMUtils

Spring 使用了很多 Helper 和 Utils 类:

  • Org.springframework.web.util.UrlPathHelper
  • Core
  • 核心
  • 数字实用程序

那么,如何给实用程序类命名呢?

78527 次浏览

我认为“ utils”应该是包的名称。类名应该指定其中逻辑的用途。添加后缀-util 是多余的。

我很确定“辅助工具”和“实用工具”是可以互换使用的。无论如何,根据您提供的示例判断,如果您的类名是一个缩写(或者其中包含像“ DomUtil”这样的缩写) ,那么可以将您的包称为“ whatever”。WhateverUtil”(如果包中有多个实用程序,则使用 Utils)。否则,如果它有一个全名,而不是一个缩写,然后称之为“无论如何。无论什么公用事业”。

这完全取决于你,但只要程序员知道你在说什么,你就可以开始了。不过,如果你是专业地为某人做这项工作,在采纳我的建议之前,先问问他们的编码标准是什么。无论如何,始终遵守商店的标准,这将有助于你保住工作。:-)

我喜欢在类型是不受控制的接口或类时只在类型名中添加“ s”的约定。JDK 中的示例包括 CollectionsExecutors。这也是谷歌收藏中使用的惯例。

当您处理您可以控制的 同学们时,我认为实用程序方法通常属于类本身。

像许多这样的约定一样,重要的不是你使用什么约定,而是你一贯地使用它。比如,如果你有三个实用工具类,你把它们叫做 CustomerUtil,ProductUtils,和 StoreUtility,那么其他试图使用你的类的人就会经常犯错误,输入 CustomerUtils,不得不查一下,诅咒你几次,等等。(我曾经听过一次关于一致性的演讲,演讲者放了一张幻灯片,上面显示了他演讲的大纲,有三个主要观点,分别标记为“1”,“2”和“ C”

永远不要使两个名字只有在一些微妙的拼写不同,如有一个 CustomerUtil 和一个 CustomerUtility。如果有一个很好的理由来创建两个类,那么它们肯定有一些不同之处,而且名称至少应该给我们一个线索,告诉我们这些不同之处是什么。如果其中一个包含与名称和地址相关的实用工具函数,而另一个包含与订单相关的实用工具函数,那么可以将它们称为 CustomerNameAndAddressUtil 和 CustomerOrderUtil 或类似的函数。当我看到名字上毫无意义的细微差别时,我经常会发疯。就像昨天,我还在做一个程序,它有三个运费字段,分别是“运费”、“运费”和“运费”。我不得不研究代码来找出它们之间的区别。

在 Java 世界中没有这方面的标准规则/约定。但是,我更喜欢像@colinD 提到的那样,在 Class name 的末尾添加“ s”。

这对于什么 大师 java API 设计师 Josh Bloch 做到了(java 集合和 google 集合)来说似乎是相当标准的

只要 Helper 和 Util 还在运行,我就会在有 API 帮助实现包的特定功能(考虑到包实现模块)的情况下调用某个 Helper; 也就是说,可以在任何上下文中调用 Util。

例如,在与银行帐户相关的应用程序中,所有特定于数字的实用程序静态 API 都将转到 org.mycompany.util.Numbers

所有帮助 API 的“帐户”特定业务规则将转到

org.mycompany.account.AccountHelper

毕竟,这是一个提供更好的文档和更清晰的代码的问题。

我是这么做的:

我认为实用程序类是一种代码味道,但有时它们需要重用不适合任何其他类的方法。

我更喜欢带有 Utils后缀的文件名,因为它包含用于多个用例的各种函数,我从不创建名为 utils 的包; 相反,我将 utils 文件放在最适合它的现有包中。

例如,如果我需要某个特性的工具,那么我将 MyFeatureUtils.java文件放在 com.myapp.myfeature包中。

如果我没有一个适当的包的 utils 文件或需要访问它从多个模块,然后我把它在 root或在 common包。

如果在项目中有一个现有的 utils包,只有在那时我才将 utils 类放在其中。

再举几个例子:

  • 通知
  • 账户,AccountUtils.java
  • Data.DatabaseUtils.java
  • 视图
  • 分析,LogUtils.java
  • Src/path/path-utils. js
  • Src/中间件/auth-utils. js

附注: 我没有使用 Helper 而不是 Utils,因为 Helper 可以是有状态的,并且通常在实例中用于委托一些状态和任务; 而 Utils 是完全无状态的,应该只包含静态函数。

附注: 我没有使用 Manager 而不是 Utils,因为 Manager 可以是有状态的,用于提供、管理和存储一个或多个实例。