4

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

4

2 回答 2

11

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

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

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

这些方法必须是静态的,这样调用者就不必为了创建一个新实例而必须引用一个实例:)

编辑:正如评论中所指出的,这可能也是值得的final

于 2012-09-05T11:54:09.127 回答
3

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

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

于 2012-09-05T11:55:43.797 回答