2012-09-05 135 views
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();,编译器会给出一个错误。

+0

你有没有试过这段代码? – gefei

+3

现在就是这样。你能说这个代码如何不做你想要的吗? (你可以更好地格式化它) –

+0

@ Rp-:如果已经有其他(私有)构造函数,则不需要。 –

回答

11

你的代码是罚款 - 所有你需要的是让你的create方法静态的,并给他们一个返回类型:

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

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

的方法具有这样调用者不为static 已经必须有一个实例的参考,以创建一个新的实例:)

编辑:正如评论中指出的,它可能也值得类final

+3

我会让'final'这个类来表达意图。 –

+0

@JoachimSauer:没错,会编辑。 –

+0

你可以告诉我,如果单身人士使用,那么它会好吗? –

3

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

如果你只是不想创建新的类默认构造函数,并且你想强制用户使用一个参数,那么只是不实现默认构造函数