如何通过 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;
}
我有下一个构造:
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;
}