马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
经常会用到map中的 keySet() 方法,得到的是 java.util.concurrent.ConcurrentHashMap$KeySetView 对象。
然后使用 contains 方法发现会抛出 NullPointerException
但是通过打印日志发现 set 是有数据的。
查看源码发现
- public static class KeySetView<K,V> extends CollectionView<K,V,K>
- implements Set<K>, java.io.Serializable {
- private static final long serialVersionUID = 7249069246763182397L;
- private final V value;
- KeySetView(ConcurrentHashMap<K,V> map, V value) { // non-public
- super(map);
- this.value = value;
- }
- /**
- * {@inheritDoc}
- * @throws NullPointerException if the specified key is null
- */
- public boolean contains(Object o) { return map.containsKey(o); }
- }
复制代码 原来当传入的key会为空的时候,会抛出 NullPointerException
办理方案
防御性编程发起
- String target = ...;
- if (target != null && set.contains(target)) {
- // 业务逻辑
- }
复制代码 前期制止了 null 通报到 set.contains(param)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |