Этот код компилируется с помощью javac JDK версии 1.6.0_33-b03-424, но не компилируется с использованием javac JDK версии 1.7.0_06.
public class Test {
private final int i = 0;
void test(Object o) {
if (getClass().isInstance(o)) {
System.out.println(getClass().cast(o).i);
}
}
}
Выход javac:
Test.java:6: error: i in Test is defined in an inaccessible class or interface
System.out.println(getClass().cast(o).i);
^
1 error
Изменение кода для хранения результата getClass.cast()
во временной переменной позволяет программе компилироваться без ошибок.
Это легко обойти, но я не могу найти никаких оснований для этого изменения в JLS 7 или упоминания об изменениях, подобных этому в примечаниях к выпуску JDK 7. Существует упоминание об изменении доступа к частным членам параметров типа для общего типа, но это не применимо здесь.
Является ли это регрессией в javac? В настоящее время применяется ограничение, которое ранее не выполнялось?