关于java:如何创建实用程序类?

How can I create an utility class?

本问题已经有最佳答案,请猛点这里访问。

例如,我想用实用方法创建一个类

1
2
3
4
5
6
7
public class Util {

   public static void f (int i) {...}

   public static int g (int i, int j) {...}

}

创建实用程序类的最佳方法是什么?

我应该使用私有构造函数吗?

我应该将实用程序类设置为抽象类吗?

我应该什么都不做吗?


对于Java中的完全无状态效用类,我建议将类声明为EDCOX1,3和EDCOX1,2,并且有一个私有构造函数来防止实例化。final关键字可以防止子类化,并可以提高运行时的效率。

该类应包含所有static方法,不应声明为abstract(因为这意味着该类不是具体的,必须以某种方式实现)。

应该为类指定一个与其所提供的实用程序集相对应的名称(如果该类要提供大量未分类的实用程序,则为"util")。

类不应包含嵌套类,除非嵌套类也是一个实用程序类(尽管这种做法可能很复杂,并且损害可读性)。

类中的方法应具有适当的名称。

仅由类本身使用的方法应是私有的。

类不应具有任何非最终/非静态类字段。

其他类也可以静态导入类以提高代码可读性(这取决于项目的复杂性)。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public final class ExampleUtilities {
    // Example Utility method
    public static int foo(int i, int j) {
        int val;

        //Do stuff

        return val;
    }

    // Example Utility method overloaded
    public static float foo(float i, float j) {
        float val;

        //Do stuff

        return val;
    }

    // Example Utility method calling private method
    public static long bar(int p) {
        return hid(p) * hid(p);
    }

    // Example private method
    private static long hid(int i) {
        return i * 2 + 1;
    }
}

也许最重要的是,每个方法的文档应该是精确的和描述性的。很有可能这个类中的方法会经常使用,并且有高质量的文档来补充代码。


根据Joshua Bloch(有效Java),您应该使用总是抛出异常的私有构造函数。这最终会阻止用户创建Util类的实例。

不建议将类标记为abstract,因为is abstract建议读者将类设计为继承。


我将创建类final,并且每个方法都是static

因此类不能扩展,方法可以由Classname.methodName调用。如果添加成员,请确保它们工作线程安全;)


使类abstract向代码的读者发送一条消息,希望您的abstract类的用户对其进行子类化。然而,这并不是您想要做的:实用程序类不应该被子类化。

因此,在这里添加私有构造函数是更好的选择。您还应该使类final不允许对实用程序类进行子类化。