首页 > 解决方案 > Java 构造函数问题 - 布尔条件

问题描述

我正在尝试将布尔条件放入构造函数中。

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

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

SecuredNotepad(int numPages) {
        super(numPages);
        checkInitialPass();
}

标签: java

解决方案


那是不可能的。

你有(至少)两个选择:

1.抛出异常

SecuredNotepad(int numPages) {
    super(numPages);
    if (!checkInitialPass()) {
        throw new IllegalArgumentException("Invalid");
    }
}

2.创建静态工厂方法

将构造函数设为私有并创建静态工厂方法。

private SecuredNotepad(int numPages) {
    super(numPages);
}

public static SecuredNotepad createInstance(int numPages) {
    if (checkInitialPass()) {
        return new SecuredNotepad(numPages);
    }
    else {
        return null;
        // Or throw exception
    }
}

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


推荐阅读