Этот класс компилируется в Java 7, но не в Java 8:
public class Foo {
public static void main(String[] args) throws Exception {
//compiles fine in Java 7 and Java 8:
Class<? extends CharSequence> aClass = true ? String.class : StringBuilder.class;
CharSequence foo = foo(aClass);
//Inlining the variable, compiles in Java 7, but not in Java 8:
CharSequence foo2 = foo(true ? String.class : StringBuilder.class);
}
static <T> T foo(Class<T> clazz) throws Exception {
return clazz.newInstance();
}
}
Ошибка компиляции:
Ошибка: (9, 29) java: метод foo в классе Foo не может применяться к данным типы; required: java.lang.Class found: true? Str [...] Класс
Причина: предполагаемый тип не соответствует ограничениям (-ам) равенства inferred: java.lang.StringBuilder ограничения равенства: java.lang.StringBuilder, java.lang.String
Почему это перестало работать на Java 8? Является ли это преднамеренным/побочным эффектом какой-либо другой функции, или это просто ошибка компилятора?