Java - 没有类构造函数是不是不好的做法?

2022-09-04 05:16:02

我想创建一个处理格式设置的帮助器类(即具有删除标点符号并在类型之间转换的方法,以及重新格式化名称等)。这似乎不需要任何字段 - 它的唯一目的是获得传递的东西以转换和返回它们,重新格式化。省略构造函数是不是不好的做法?如果是这样,我的构造函数应该做什么?我正在查看此链接,并注意到它所描述的类缺少构造函数。


答案 1

省略构造函数是不是不好的做法?

是的 - 因为除非您指定任何构造函数,否则Java编译器将为您提供一个与类本身具有相同可见性的构造函数。

假设你所有的方法都是静态的-除非你想要多态性,否则这似乎是可能的-你应该让你的类并给它一个构造函数,这样其他开发人员就不会意外地创建你的类的实例,而这将是毫无意义的。在考虑API时,任何时候我都可以消除开发人员做一些愚蠢的事情的能力,我这样做:)finalprivate

所以像这样:

public final class Helpers {
    private Helpers() {
    }

    public static String formatDate(Date date) {
        // etc
    }
}

请注意,通过从等式中去除多态性,您还消除了在测试等中更改此行为的可能性。这也许很好 - 我不相信“没有静态,永远” - 但值得考虑。


答案 2

任何具有所有不具有或不需要任何状态的方法的类都可以通过使构造函数私有来自由降低构造函数的可见性。

Java中的java.lang.Math类示例。

与所有执行与类类似的工作的静态方法一样,它们已将构造函数声明为,以便没有人可以意外地创建该类的实例。java.lang.Mathprivate

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}