繁体   English   中英

奇怪的行为,Long的Generic ArrayList

[英]Strange behaviour, Generic ArrayList of Long

我有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);

但为什么需要呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM