I ran into this a couple of times now. When using numbers as keys in maps, you have to be really careful with number literals. Number literals by default compile to be of int
primitive type and they can be automatically cast (boxed) to Object as Integers.
Take the code below:
public class Test { static MaptestMap = new HashMap (); public static void main(String[] args) { testMap.put((long)0, "zero"); System.out.println(testMap.get((long)0)); System.out.println(testMap.get(0)); } }
Notice the cast to long
primitive type, tesMap.put(0, "zero")
won't even compile. The unfortunate thing is only that the java.util.Map.get
method is not parametrized with the Key class of the Map, so testMap.get(0)
compiles without errors, but it returns null.