Collection#contains() の引数はObject型

次のようなコード

HashSet<Long> set = new HashSet<Long>();
set.add(1L);

set.contains(1); // => ?

これはfalseになる。リテラルの1はboxingがかかってもInteger型にしかならず、Long型の1とは一致しない。しかもコンパイルエラーにもならない。あやうく嵌りそうになった。
あと、add() のほうは引数にEを取るので、set.add(1)コンパイルエラーになる。


Map#containsKey() などでも同じ。