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

时间:2013-04-09 06:37:16

标签: java constructor helper

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

6 个答案:

答案 0 :(得分:40)

  

遗漏构造函数是不好的做法?

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

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

类似于:

public final class Helpers {
    private Helpers() {
    }

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

请注意,通过将多态性排除在等式之外,您还可以删除更改此行为以进行测试等的可能性。这可能很好 - 我不相信“没有静态”,但它是值得考虑。

答案 1 :(得分:6)

任何具有所有没有或不需要任何状态的方法的类都可以通过使构造函数变为私有来减少构造函数的可见性。

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

编译器会为您生成一个默认构造函数(没有参数)。如果你的类没有声明并且没有扩展需要初始化的类,你可以在没有声明显式构造函数的情况下放弃它

答案 4 :(得分:1)

没有任何好处可以省略构造函数,因为你的类中没有任何实例变量!

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

如果你跳过构造函数,编译器仍会插入默认的构造函数,这是公平的!!

答案 5 :(得分:-2)

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

但是如果你没有任何特殊需要使用oveloaded构造函数或制作任何单例模式,那么你可以删除构造函数。

如果你在你的情况下使用静态方法,那么你也不需要定义构造函数,因为你不需要拥有这个类的对象。