You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Tagir Valeev (JIRA)" <ji...@apache.org> on 2014/10/29 03:58:34 UTC
[jira] [Created] (COLLECTIONS-536) (Code style) map.size() call in
MapUtils.putAll()
Tagir Valeev created COLLECTIONS-536:
----------------------------------------
Summary: (Code style) map.size() call in MapUtils.putAll()
Key: COLLECTIONS-536
URL: https://issues.apache.org/jira/browse/COLLECTIONS-536
Project: Commons Collections
Issue Type: Bug
Components: Map
Affects Versions: 4.0, 3.2.1
Environment: Any
Reporter: Tagir Valeev
Priority: Trivial
In class org.apache.commons.collections(4).MapUtils there's a method putAll(final Map<K, V> map, final Object[] array) which starts with
map.size(); // force NPE
Actually map.size() is not that harmless call for any map. For example, consider java.util.concurrent.ConcurrentHashMap size() implementation: depending on the circumstances it may take even more time than the rest of the putAll method (at least prior to JDK 8). I'd suggest to replace it with more conventional check like:
if(map == null) {
throw new NullPointerException();
}
If you still want to save bytes, you may use map.getClass(). It's final, so it will never be overridden to do something strange and it's even used by JavaC for the same purpose (to trigger NPE). For example, if you compile and disassemble this code:
public class Outer {
public class Inner {}
public void test(Outer n) { n.new Inner(); }
}
You will see a getClass() call which is used to trigger NPE.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)