Rae*_*ald 6 java null set nullpointerexception
我有一个给出一个Set对象的方法.它委托给它的方法要求Set它不包含任何null元素.我想检查的前提条件是,Set早不包含null元素,在代表团之前的方法.显而易见的代码是这样做的:
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
}
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为如果实现本身不允许null元素,则Set.contains()可能抛出一个.在那种情况下捕捉然后忽略它会起作用但是不够优雅.有没有一种巧妙的方法来检查这个前提条件?NullPointerExceptionSetNullPointerException
Set界面中是否存在设计缺陷?如果Set实现可能永远不会包含null,为什么不要求Set.contains(null)总是返回false?还是有isNullElementPermitted()谓词?
最简单的方法是枚举 Set 并检查空值。
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");
}
}
Run Code Online (Sandbox Code Playgroud)