下面的代碼JLS 6/7的哪些更改會導致以下未檢查的代碼,其集合和泛型在Java 7中可用?
import java.util.*;
import java.io.*;
@SuppressWarnings("unchecked")
List<Serializable> list = (List<Serializable>) (List<?>)
Collections.singletonList(new Object());
for (Object el : list) { // -> ClassCastException
System.out.println(el);
}
是正確的Java(即使代碼是可疑的)。使用javac
和java
6使用它和
它是一個語言的變化時,修正了或隱藏的功能拋出
Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.io.Serializable
,同時它在運行時錯誤?
(注:代碼與Eclipse編譯運行,而無需對所有的Eclipse版本檢查錯誤 - 太陽神開普勒)
在Java 6中,'?'是'?擴展Object'不可序列化我假設Java 7對於你可以投入'''的東西更加自由。如果你只是施放'(List)',這將在兩個版本中都起作用。 –
http://stackoverflow.com/questions/15389994/lazy-class-cast-in-java/15391048#15391048 – ZhongYu
爲了清楚起見,您可以評論在Java 6中拋出異常的那一行嗎?我假設它是(for Object el:list){'。 –