奇怪的行为,Long的Generic ArrayList

时间:2012-08-26 19:33:15

标签: java generics arraylist

someMethod()返回Collection<Long>

ArrayList<Long> results = (ArrayList<Long>) someMethod();
Long value = results.get(0);

我得到ClassCastException: java.util.ArrayList cannot be cast to java.lang.Long。 实际上尝试System.out.println(results.get(0));,它会返回,例如[32]。 我不明白。这是Long的ArrayList!为什么get(0)会返回ArrayList

这有助于:

Object o = results.get(0);
ArrayList<Long> al = (ArrayList<Long>) o;
Long val = al.get(0);

但为什么需要呢?

1 个答案:

答案 0 :(得分:3)

显然someMethod()实际上正在返回Collection<List<Long>>,违反了声明的返回类型。由于类型擦除,这是可能的。只要类类型正确,编译器就很高兴,可以忽略泛型类型(编译器只会引发警告)。基本上这是someMethod()中的错误。