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

and*_*112 1 java null constructor instantiation

我有下一个构造:

public Dato (String nombre, float limiteInferior, float limiteSuperior) {
        this.nombre = nombre;
        this.limiteInferior = limiteInferior;
        this.limiteSuperior = limiteSuperior;
    }
Run Code Online (Sandbox Code Playgroud)

我想在limiteInferior> = limiteSuperior时停止实例化或"返回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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

你有几个选择.

您可以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);
}
Run Code Online (Sandbox Code Playgroud)

或者你可以扔一个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;
}
Run Code Online (Sandbox Code Playgroud)