我有一个应用程序,其中有一个名为 PlausibilityChecker
的类。此类只有静态方法,例如 checkZipcodeFormat
或 checkMailFormat
。我在我的 GUI 类中使用它们来检查输入,然后再将其发送到较低层。
这是好的做法吗?我以为我只会使用静态方法,这样我就不必关心将实例传递给 GUI 类或在每个不引用 gui 对象的 gui 类中拥有一个实例字段。
我注意到 Java NIO
的 Files
类只有静态方法,所以我认为这不会是那么可怕的错误。
最佳答案
我会说你做得对。除此之外,对您的实用程序类的一些建议:
- 确保它没有任何状态。也就是说,类中没有字段,除非它被声明为
static final
。此外,请确保该字段也是不可变的,例如字符串
s. - 确保它不能是其他类的父类(super class)。将类设为
final
以便其他程序员无法扩展它。 - 这个值得商榷,但你可以声明一个无参数构造函数
private
,所以没有其他类可以创建你的实用程序类的实例(使用反射或类似的方法可以,但没有需要与类(class)一起保护)。为什么你可能不这样做?好吧,这是您想要/需要注入(inject)实用程序类的实例的奇怪情况,例如通过一个接口(interface)而不是直接在你的类中使用它。 Here's an example of this .这种设计确实很奇怪,但可能会发生(如上面的链接所示),但如果您不会在这种情况下运行,最好的建议是保持构造函数private
。
有很多库提供实用程序类来帮助我们程序员的工作。最著名的之一是 Apache Common库集。它是开源的,您可以检查代码以了解他们如何设计这些实用程序类以创建您的。 (免责声明:我不工作或不支持这些库,我是他们的快乐用户)
关于Java 最佳实践 : Class with only static methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31409982/