I have a method that is given a Set
of objects. A method it delegates to requires that the Set
does not contain any null elements. I would like to check the precondition that the Set
contains no null elements early, in the method before the delegation. The obvious code do do so is this:
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
}
But this is incorrect, because Set.contains()
may throw a NullPointerException
if the Set
implementation itself does not permit null elements. Catching then ignoring the NullPointerException
in that case would work but would be inelegant. Is there a neat way to check this precondition?
Is there a design flaw in the Set
interface? If a Set
implementation may never contain a null, why not instead require Set.contains(null)
to always return false
? Or have a isNullElementPermitted()
predicate?
The simplest way would be to enumerate the Set and check for nulls.
public void scan(Set<PlugIn> plugIns) {
if (plugIns == null) throw new NullPointerException("plugIns");
for (PlugIn plugIn : plugIns) {
if (plugIn == null) throw new NullPointerException("plugIns null element");
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With