Java—没有类构造函数是一种不好的做法吗?

Java—没有类构造函数是一种不好的做法吗?,java,constructor,helper,Java,Constructor,Helper,我想创建一个处理格式设置的帮助器类(即,具有删除标点符号和在类型之间转换的方法,以及重新设置名称格式等)。这似乎不需要任何字段——它唯一的目的是让传递的内容转换并返回它们,重新格式化。省略构造函数是一种不好的做法吗?如果是这样,我的构造函数应该做什么?我正在查看并注意到它所描述的类缺少构造函数。任何具有所有方法的类,如果没有或不需要任何状态,都可以通过使构造函数私有来降低构造函数的可见性 Java中的示例类。 由于java.lang.Math有所有静态方法,它们的工作与类类似,它们将构造函数声明

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

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

Java中的示例类。

由于
java.lang.Math
有所有静态方法,它们的工作与类类似,它们将构造函数声明为
private
,因此没有人会意外地创建该类的实例

    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}
省略构造函数是一种不好的做法吗

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

假设你的所有方法都是静态的——除非你想要多态性,否则很可能是静态的——你应该让你的类
final
,并给它一个
private
构造函数,这样其他开发人员就不会意外地创建你的类的一个实例,而这是毫无意义的。在考虑API时,每当我可以取消开发人员做蠢事的能力时,我都会这么做:)

比如:

public final class Helpers {
    private Helpers() {
    }

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

请注意,通过将多态性从等式中剔除,您也消除了在测试等中改变这种行为的可能性。这可能很好——我不相信“没有静态”,但这是值得考虑的。

不错的做法。但是您给出的示例没有任何可以在对象上下文中使用的成员变量。在这种情况下,最好使用静态方法,因为在调用方法之前,不需要分配内存为类创建对象。

通常,在类中定义构造函数是一种很好的编码实践,尽管每个类都有一个默认构造函数

但是,如果您没有任何特殊需要来使用已加载的构造函数或创建任何单例模式,那么您可以删除该构造函数


如果您在您的案例中使用静态方法,那么您也不需要定义构造函数,因为您不需要拥有此类的对象

编译器将为您生成一个默认构造函数(不带参数)。如果您的类没有state,并且没有扩展需要初始化的类,那么您可以让它不声明显式构造函数

no省略构造函数,因为您的类中没有任何实例变量

构造函数用于初始化实例变量


不过,如果您跳过构造函数,编译器无论如何都会插入默认构造函数,这很公平

谢谢!!我以前(在我使用Java的短暂经历中)从未见过私有构造函数,所以这很有趣,也很有帮助。我实现了这个解决方案,现在,在我的代码中的某个地方,需要一个方法将输出的员工数据格式化为字符串(稍后发送到stdout)。当它可能只用于Employee对象,而不是一般用途时,将其放在这个实用程序类中有意义吗?@FalseAzure:如果你有其他问题,你应该将其作为其他问题发布。不要只是把它作为对现有问题或答案的评论。