如何通过 Java 中的条件锁定实例化?

How to lock instantiation by a condition in Java?

我有下一个构造:

public Dato (String nombre, float limiteInferior, float limiteSuperior) {
        this.nombre = nombre;
        this.limiteInferior = limiteInferior;
        this.limiteSuperior = limiteSuperior;
    }

我想在 limiteInferior >= limiteSuperior 时停止实例化或 "return null"。类似于:

public Dato(String nombre, float limiteInferior, float limiteSuperior) {
        //Validar que el limite superior no sea menor o igual al inferior
        if (limiteInferior < limiteSuperior) {
            this.nombre = nombre;
            this.limiteInferior = limiteInferior;
            this.limiteSuperior = limiteSuperior;
        } else {
            this = null;
        }
    }

您有多种选择。

你可以让构造函数private, 并控制使用工厂方法创建实例,例如:

// not accessible from outside
private Dato(String nombre, float limiteInferior, float limiteSuperior) {
    assert limiteInferior < limiteSuperior : "lower limit must be lower";
    this.nombre = nombre;
    this.limiteInferior = limiteInferior;
    this.limiteSuperior = limiteSuperior;
}

public static Dato create(String nombre, float limiteInferior, float limiteSuperior) {
    if (limiteInferior >= limiteSuperior) {
        return null;
    }
    // params are valid, let's create this thing
    return new Dato(nombre, limiteInferior, limiteSuperior);
}

或者您可以抛出一个 IllegalArgumentException,例如:

public Dato(String nombre, float limiteInferior, float limiteSuperior) {
    //Validar que el limite superior no sea menor o igual al inferior
    if (limiteInferior >= limiteSuperior) {
        throw new IllegalArgumentException("Invalid range!");
    }
    this.nombre = nombre;
    this.limiteInferior = limiteInferior;
    this.limiteSuperior = limiteSuperior;
}