如何创建实用程序类



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

public class Util {
   public static void f (int i) {...}
   public static int g (int i, int j) {...}
}

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

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

我应该为抽象类创建实用程序类吗?

我应该什么都不做吗?

对于Java中完全无状态的实用程序类,我建议将该类声明为publicfinal,并具有私有构造函数以防止实例化。final关键字可以防止子类化,提高运行时的效率。

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

类应该被赋予一个与它所提供的实用程序集相对应的名称(如果类要提供广泛的未分类实用程序,则为"Util")。

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

类中的方法应该有合适的名称。

只有类自己使用的方法应该是私有的。

类不应该有任何非final/非静态的类字段。

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

的例子:

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 (Effective Java)的说法,你应该使用总是抛出异常的私有构造函数。这将最终阻止用户创建util类的实例。

不建议将类标记为抽象,因为is abstract暗示读者类是为继承而设计的。

我将使类为final,每个方法将为static

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

创建abstract类会向代码的读者发送一条消息,表示您希望abstract类的用户创建它的子类。然而,这不是你想要的:一个实用程序类不应该被子类化。

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

最新更新