我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);
但为什么需要呢?
答案 0 :(得分:3)
显然someMethod()
实际上正在返回Collection<List<Long>>
,违反了声明的返回类型。由于类型擦除,这是可能的。只要类类型正确,编译器就很高兴,可以忽略泛型类型(编译器只会引发警告)。基本上这是someMethod()
中的错误。