【问题标题】:null-safe Collection contains method空安全集合包含方法
【发布时间】:2012-11-30 10:37:33
【问题描述】:

在 Java 集合上执行 null-safe contains 的最佳方法是什么?

换句话说 -

 if (collection != null && collection.contains(x))

?

我希望 Apache commons-collections 有类似 CollectionUtils.contains(collection, x) 的东西,如果集合为 null,它只会返回 false,就像 size() 一样,它将 null 视为空集合。

但是,似乎没有这样的事情 - 我只是错过了吗?

【问题讨论】:

  • collection != null && collection.contains(x) 有什么问题?简单且无外部依赖!
  • @AbhinavSarkar:这就是我的想法!
  • 这是一个有点相关的帖子,由不想一直检查 null 的人写的:stackoverflow.com/questions/271526/…
  • 请注意,如果x 为空,则存在更大的问题。即使您检查了collection 不为空,也有一些类型的集合(例如没有自己的Comparator 的TreeSet)collection.contains(null) 会抛出NullPointerException,您会在其中真的希望它简单地返回false。我仍在寻找一种安全的方式来执行collection.contains(x),而无需明确捕获此异常。

标签: java collections apache-commons-collection


【解决方案1】:

您应该在此处应用 Null Object Pattern 并使用空集合,而不是空集合。当然,也许这适合您的问题,但是如果没有更多上下文,很难说。换句话说,我认为您正在解决错误的问题——为什么collection 首先可能为空?

【讨论】:

  • 总的来说我同意。具体问题是集合来自session.getAttribute,因此可能永远不会被设置。所以至少一个非空检查是不可避免的——但是如果有多个这样的检查,是的,我可以简单地进行一次检查并用一个空集合替换。
  • 在这种情况下,考虑使用 Guava 的 optional,也许?问题是仍然需要检查 Optional.isPresent()。我认为这基本上是不可避免的。
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多