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

twi*_*wid 4 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 11

你的代码几乎没问题 - 你只需要使你的create方法保持静态,并给它们一个返回类型:

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

public static MyClass createMyClassDouble(double d) {
  return new MyClass(d);
}
Run Code Online (Sandbox Code Playgroud)

该方法必须是静态的,这样,来电不必须有,以创建一个新的实例,以实例的引用:)

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

  • 我只是为了表明意图而使"最终的"课程成为现实. (3认同)