1

我有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]。我不明白这个。这是长的 ArrayList!为什么get(0)退货ArrayList

这有助于:

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

但为什么需要这样做?

4

1 回答 1

3

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

于 2012-08-26T19:41:18.680 回答