如何创建实用程序类?
2022-08-31 14:16:17
我想用实用工具方法创建一个类,例如
public class Util {
public static void f (int i) {...}
public static int g (int i, int j) {...}
}
创建实用程序类的最佳方法是什么?
我应该使用私有构造函数吗?
我应该为抽象类创建实用程序类吗?
我应该什么都不做吗?
我想用实用工具方法创建一个类,例如
public class Util {
public static void f (int i) {...}
public static int g (int i, int j) {...}
}
创建实用程序类的最佳方法是什么?
我应该使用私有构造函数吗?
我应该为抽象类创建实用程序类吗?
我应该什么都不做吗?
对于 Java 中完全无状态的实用程序类,我建议将类声明为 和 ,并具有私有构造函数以防止实例化。关键字可防止子类化,并且可以在运行时提高效率。public
final
final
该类应包含所有方法,并且不应声明(因为这意味着该类不是具体的,必须以某种方式实现)。static
abstract
应为该类指定一个与其提供的实用程序集相对应的名称(如果该类要提供各种未分类的实用程序,则为“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;
}
}
也许最重要的是,每种方法的文档都应该是精确和描述性的。这个类中的方法很可能会经常使用,并且有高质量的文档来补充代码是件好事。
根据Joshua Bloch(有效的Java)的说法,你应该使用总是抛出异常的私有构造函数。这最终会阻止用户创建 util 类的实例。
不建议标记类抽象,因为是抽象表明读者类是为继承而设计的。