在调用超类构造函数之前验证构造函数的参数

ldn*_*ldn 5 java constructor

例如,像这样的构造函数:

public class Car extends Vehicle {
     public Car(Car a){
         super(a.getName()); //what if 'a' is null 
     }
}
Run Code Online (Sandbox Code Playgroud)

在调用 super() 之前我无法检查参数的条件。

Ill*_*sil 6

在这种情况下,我建议使用工厂方法:

public class Car extends Vehicle {
    private Car(String name){
        super(name);
    }

    public static Car of(Car a) {
        Objects.requireNonNull(a, "a is required");
        return new Car(a.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)