JDK 7 中关于私有成员访问的 javac 行为更改
2022-09-04 04:19:25
此代码使用 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中的回归吗?它现在是否正在执行以前没有执行的限制?