Tengo un método que tiene un Set
de objetos. Un método al que delega requiere que el Set
no contenga ningún elemento nulo. Me gustaría check the precondition que el Set
no contiene elementos nulos temprano, en el método antes de la delegación. El código obvia no hacerlo es la siguiente:Manera aseada de comprobar si un conjunto no contiene un nulo
public void scan(Set<PlugIn> plugIns) {
if (plugIns == null) {
throw new NullPointerException("plugIns");
} else if (plugIns.contains(null)) {
throw new NullPointerException("plugIns null element");
}
// Body
}
Pero esto es incorrecto, porque Set.contains()
puede lanzar una NullPointerException
si el Set
aplicación en sí no permite elementos nulos. La captura luego ignorando el NullPointerException
en ese caso funcionaría but would be inelegant. ¿Hay alguna manera clara de verificar esta condición previa?
¿Existe un error de diseño en la interfaz Set
? Si una implementación Set
nunca puede contener un valor nulo, ¿por qué no necesita para devolver siempre false
? ¿O tiene un predicado isNullElementPermitted()
?
Si tiene un requisito específico como este, la subclase 'Establecer' y no permitir 'poner nulo'. Además, no usaría el 'else' aquí. –