如何创建一个实用工具类? [重复]

问题描述 投票:43回答:4

这个问题已经在这里有一个答案:

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

public class Util {

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

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

}

这是创建一个实用工具类,最好的方法是什么?

我应该使用私有构造?

我应该为抽象类,工具类?

我应该什么都不做?

java utility utility-method
4个回答
98
投票

对于Java中的完全无状态的实用工具类,建议类中声明publicfinal,并有一个私人的构造函数,以防止实例化。所述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;
    }
}

也许最重要的是,每种方法的文件应精确和描述。机会是从这个类中的方法将被经常使用,其良好的具有高品质的文档,以补充代码。


13
投票

根据约书亚·布洛克(有效的Java),你应该使用私有的构造方法,它总是抛出异常。这将最终阻止用户创建util的类的实例。

盯人不建议使用抽象类,因为是抽象的建议类是专为继承读者。


8
投票

我会做的类final和每一个方法是static

因此,类不能延长,这些方法可以通过Classname.methodName调用。如果添加成员,确保他们的工作线程安全;)


5
投票

制作类abstract将消息发送到您希望abstract类的用户它的子类代码的读者。然而,这是不是你想要什么,然后做:一个工具类,不应该被继承。

因此,添加一个私有构造函数在这里是更好的选择。你也应该让类final不允许你的实用类的子类。

© www.soinside.com 2019 - 2024. All rights reserved.