如何使类不允许创建新对象(new Object())

时间:2012-09-05 11:51:36

标签: java new-operator

我正在开发一个库,我不希望用户使用new关键字直接创建类的实例,而是我有特殊的方法来创建对象。因此,如果用户使用new关键字实例化一个类,编译器会给出错误。 例如:

public class MyClass {
    private MyClass(int i) {  }

    public MyClass createMyClassInt(int i) {
        return new MyClass(i);
    }

    private MyClass(double d) { }

    public MyClass createMyClassDouble(double d) {
        return new MyClass(d);
    }
}

因此,当用户尝试实例化MyClass myClass = new MyClass();时,编译器将发出错误。

2 个答案:

答案 0 :(得分:11)

您的代码几乎很好 - 您只需要使create方法保持静态,并为它们提供返回类型:

public static MyClass createMyClassInt(int i) {
  return new MyClass(i);
}

public static MyClass createMyClassDouble(double d) {
  return new MyClass(d);
}

方法必须是静态的,以便调用者已经必须具有对实例的引用才能创建新实例:)

编辑:正如评论中所述,它可能也值得上课final

答案 1 :(得分:3)

如果您想通过特殊方法创建课程,为什么不使用工厂设计模式? 类中的静态方法,它返回类

的新实例

如果您不想通过默认构造函数创建新类,并且您想强制用户使用带参数的一个,那么就不要实现默认构造函数