Java中实用程序类的命名约定

JR.*_*JR. 110 java naming-conventions

在Java中编写实用程序类时,要遵循哪些好的指导原则?

包装应该是"util"还是"utils"?是ClassUtil还是ClassUtils?什么时候是"助手"或"效用"?公用事业或公用事业?或者你使用它们的混合物?

标准Java库使用Utils和Utilities:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities中
  • javax.swing.plaf.basic.BasicGraphicsUtils

Apache使用各种Util和Utils,尽管主要是Utils:

  • org.apache.commons.modeler.util.DomUtil
  • org.apache.commons.modeler.util.IntrospectionUtils
  • org.apache.commons.io.FileSystemUtils
  • org.apache.lucene.wordnet.AnalyzerUtil
  • org.apache.lucene.util.ArrayUtil
  • org.apache.lucene.xmlparser.DOMUtils

Spring使用了很多Helper和Utils类:

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

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

Jay*_*Jay 77

像许多这样的约定一样,重要的不是你使用的约定,而是你一直使用它.就像,如果你有三个实用程序类,你称之为CustomerUtil,ProductUtils和StoreUtility,其他人试图使用你的类会不断混淆并错误地键入CustomerUtils,必须查找它,诅咒你几次, (我听过一次演讲的一致性讲座,演讲者张贴了一张幻灯片,上面显示了他演讲的轮廓,标有"1","2"和"C"三个要点.)

从来没有使两个名称只有一些微妙的拼写不同,比如拥有CustomerUtil和CustomerUtility.如果有充分的理由做两个课程,那么他们必须有不同的东西,这个名字至少应该让我们知道这个差异是什么.如果一个包含与名称和地址相关的实用程序函数,另一个包含与订单相关的实用程序函数,则将它们称为CustomerNameAndAddressUtil和CustomerOrderUtil或其他类似函数.当我看到名字中无意义的微妙差异时,我经常疯狂.就像昨天一样,我正在制定一个有三个运费成本领域的计划,名为"货运","货运成本"和"费用".我不得不研究代码来弄清楚它们之间的区别.

  • 4号的IV :-) - 但是*****Freightcost*和*frght*之间的差异是什么? (8认同)
  • @KayMagnus这个帖子是一年多以前的,但我记得,其中一个是记录中的当前运费,在更改订单内容之前,因此可能是运费; 另一个是从表中取得的标准运费; 第三个是在某些特殊情况下使用的计算成本,如海外发货.就像为什么他们至少不能称他们为"currFreight","stdFreight"和"calcFreight".这至少会产生一个问题. (4认同)

rin*_*rer 27

Java世界中没有标准的规则/约定.但是,我更喜欢在@colinD提到的类名末尾添加"s".

这似乎是Master Java API Designer Josh Bloch所做的相当标准(java集合以及google集合)

只要Helper和Util开始,当有API帮助实现包的特定功能时(考虑到实现模块的包),我会称之为Helper; 意味着可以在任何上下文中调用Util.

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

帮助API的所有"帐户"特定业务规则

org.mycompany.account.AccountHelper
Run Code Online (Sandbox Code Playgroud)

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

  • 这似乎是合理的,Helper会更具体地说是Utils. (4认同)
  • 链接已损坏。我找到了[另一个](http://www.cs.bc.edu/~muller/teaching/cs102/s06/lib/pdf/api-design)。 (3认同)

Col*_*inD 20

我喜欢当类型是接口或你不控制的类时,只在类型名称中添加"s"的约定.JDK中的示例包括CollectionsExecutors.它也是Google Collections中使用的惯例.

当你正在处理一个你可以控制的类时,我会说实用方法通常属于类本身.

  • Google Guava也使用这种模式 (2认同)

Ait*_*ito 8

我认为'utils'应该是包名.类名应该指定其中逻辑的用途.添加sufix -util(s)是多余的.

  • 在 ['按功能打包'](http://www.javapractices.com/topic/TopicAction.do?Id=205) 方法中,这不是正确的做法。 (2认同)