这个问题已经在这里有一个答案:
我想创建一个实用工具方法的类,例如
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;
}
}
也许最重要的是,每种方法的文件应精确和描述。机会是从这个类中的方法将被经常使用,其良好的具有高品质的文档,以补充代码。
根据约书亚·布洛克(有效的Java),你应该使用私有的构造方法,它总是抛出异常。这将最终阻止用户创建util的类的实例。
盯人不建议使用抽象类,因为是抽象的建议类是专为继承读者。
我会做的类final
和每一个方法是static
。
因此,类不能延长,这些方法可以通过Classname.methodName
调用。如果添加成员,确保他们的工作线程安全;)
制作类abstract
将消息发送到您希望abstract
类的用户它的子类代码的读者。然而,这是不是你想要什么,然后做:一个工具类,不应该被继承。
因此,添加一个私有构造函数在这里是更好的选择。你也应该让类final
不允许你的实用类的子类。