[英]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.