如何创建实用程序类?

2022-08-31 14:16:17

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

public class Util {

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

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

}

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

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

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

我应该什么都不做吗?


答案 1

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

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

应为该类指定一个与其提供的实用程序集相对应的名称(如果该类要提供各种未分类的实用程序,则为“Util”)。

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

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

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

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

该类还可以由其他类静态导入,以提高代码的可读性(但是,这取决于项目的复杂性)。

例:

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;
    }
}

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


答案 2

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

不建议标记类抽象,因为是抽象表明读者类是为继承而设计的。


推荐