检查Set是否不包含null的简洁方法

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()谓词?

Dan*_*ker 5

最简单的方法是枚举 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)