使用构造函数创建新对象时的对象控制

Object control while creating a new one with constructor

我有一个简单的银行账户 class。如果用户年龄小于 18 岁,我不想创建对象。

所以我尝试创建一个这样的 class。但它不起作用。我可以在面向对象编程中做一些我想做的事情吗?

public class BankAccount {

    private String name;
    private String id;
    private  int age;
    private  double balance;
    private String accNumber;

    public BankAccount(String name, String id, int age, double balance, String accNumber) {
        this.name = name;
        this.id = id;
        this.balance = balance;
        this.accNumber = accNumber;
        if (age<18){
            System.out.println("You can not create a bank account If You're younger than 18 years old");
            return;
     }
}

您在评论中得到了一些提示,但我会 post 在这里回答。这只是一种建议的方法,但可能还有其他方法,具体取决于您要如何设计代码。

您可以使用静态工厂方法,仅当年龄大于或等于 18 岁时才创建您的对象。示例:

public class BankAccount {

    private String name;
    private String id;
    private int age;
    private double balance;
    private String accNumber;

    // Notice the private constructor. This class can be instantiated only by call the static method #from
    private BankAccount(String name, String id, int age, double balance, String accNumber) {
        this.name = name;
        this.id = id;
        this.age = age;
        this.balance = balance;
        this.accNumber = accNumber;
    }

    public static BankAccount from(String name, String id, int age, double balance, String accNumber) {
        if (age < 18) {
            return null;
        }

        return new BankAccount(name, id, age, balance, accNumber);
    }

}

您将创建您的 BankAccount 为:

// This will be null, because age < 18
BankAccount bankAccount = BankAccount.from("name", "id", 1, 0, "accNumber");

// This will be an actual object
BankAccount bankAccount = BankAccount.from("name", "id", 20, 0, "accNumber");