Следующий код
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
в то время как он работает без ошибок при использовании javac
и java
7.
Это изменение языка, исправленная ошибка или скрытая функция?
(Примечание: код, скомпилированный с помощью Eclipse, работает без ошибок на всех проверенных версиях Eclipse — от Helios до Kepler.)
?
является? extends Object
не сериализуемым. Я предполагаю, что Java 7 более либеральна в отношении того, к чему вы можете привести?
. Если вы просто разыграете(List)
, это будет работать на обеих версиях. - person Peter Lawrey   schedule 28.08.2013for (Object el : list) {
. - person Paul Bellora   schedule 28.08.2013list
, а не то, как я выполнил назначение? - person Piotr Findeisen   schedule 29.08.2013