Java构造函数问题-布尔条件

Java构造函数问题-布尔条件,java,Java,我试图把布尔条件放在构造函数中 任务是仅在条件为真时创建对象 在下面的示例中:如果checkInitialPass()返回false,则不应创建该对象 SecuredNotepad(int numPages) { super(numPages); checkInitialPass(); } 那是不可能的 您(至少)有两种选择: 1.抛出异常 SecuredNotepad(整数){ 超级(numPages); 如果(!checkInitialPass()){ 抛出

我试图把布尔条件放在构造函数中

任务是仅在条件为真时创建对象

在下面的示例中:如果
checkInitialPass()
返回false,则不应创建该对象

SecuredNotepad(int numPages) {
        super(numPages);
        checkInitialPass();
}
那是不可能的

您(至少)有两种选择:

1.抛出异常
SecuredNotepad(整数){
超级(numPages);
如果(!checkInitialPass()){
抛出新的IllegalArgumentException(“无效”);
}
}
2.创建一个静态工厂方法 将构造函数设为私有并创建静态工厂方法

private-SecuredNotepad(整数){
超级(numPages);
}
公共静态SecuredNotepad createInstance(int numPages){
if(checkInitialPass()){
返回新的SecuredNotepad(numPages);
}
否则{
返回null;
//或者抛出异常
}
}

我会选择工厂方法,如果初始传递失败,它会抛出异常。或者,如果您想进一步扩展它,可以使用
SecureNotepadFactory
,正如Thomas Timbul在评论中提到的那样。

从技术上讲,您为时已晚:对象已经创建。但是如果你在构造函数中抛出异常,你可以阻止构建它的代码访问它。我不确定在构造函数中抛出异常是否是个好主意。选择一些静态的
createInstance
方法听起来是一个更好的选择。该死,你跑得更快了+1.或者,如果封装允许,您可以将检查移动到调用代码。一个
SecureNotepadFactory
可能就是一张罚单?