我正在开发一个库,我不希望用户使用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();
时,编译器将发出错误。
答案 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)
如果您想通过特殊方法创建课程,为什么不使用工厂设计模式? 类中的静态方法,它返回类
的新实例如果您不想通过默认构造函数创建新类,并且您想强制用户使用带参数的一个,那么就不要实现默认构造函数