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

Java 如何使类不允许创建新对象(new object()),java,new-operator,Java,New Operator,我正在开发一个库,我不希望用户直接使用new关键字创建类的实例,相反,我有特殊的方法来创建对象。因此,如果用户使用new关键字实例化一个类,编译器可能会给出错误。 例如: public class MyClass { private MyClass(int i) { } public MyClass createMyClassInt(int i) { return new MyClass(i); } private MyClass(doubl

我正在开发一个库,我不希望用户直接使用
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()时,编译器将给出一个错误。

您的代码几乎没有问题-您只需将
创建方法设置为静态,并给它们一个返回类型:

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

public static MyClass createMyClassDouble(double d) {
  return new MyClass(d);
}
这些方法必须是静态的,这样调用方就不必为了创建新实例而引用实例:)


编辑:正如评论中所指出的,如果你想用特殊的方法创建你的类,为什么不使用工厂设计模式呢? 类中的静态方法,该方法返回类的新实例


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

您尝试过该代码吗?现在就是这样。你能说这段代码怎么没有达到你想要的效果吗?(您可以更精确地格式化它;)@Rp-:如果已经有其他(私有)构造函数,则不需要@l46kok:Thx。。我不知道这个概念。你能告诉我,如果使用单例模式,那么它会好吗?@nick:看起来这不适合单例模式,不。。。调用方可能希望创建具有不同值的多个实例。(就个人而言,我一般不喜欢单身模式,但那是另一回事。)@JonSkeet Ok先生。所以,除了Singleton,如果我只想要一个对象,你建议我更喜欢什么呢?@nick:听起来你的评论与这个问题的主题无关-我建议你问一个单独的问题,有更多的上下文。