编译器不再允许访问类型变量的私有成员

时间:2015-02-21 16:32:55

标签: java private specifications

根据文档http://www.oracle.com/technetwork/java/javase/compatibility-417013.html,Java 7阻止访问私有类型变量的成员。给出的例子是:

class A {
   private int val = 42;
}

class Test<X extends A> {
    void test(X x) {
        int i = x.val; //error in JDK 7
    }
}

我想知道为什么这种行为有任何意义,因为使用以下&#34;解决方法&#34;,只需使用标准语言功能就可以实现对私有成员的访问:

class A {
    private int val = 42;
}

class Test<X extends A> {
    void test(X x) {
        final A a = x;          
        int i = a.val; // works in Java 7
    }
}

如果通过所有路径屏蔽访问,屏蔽对私有字段的访问将是有意义的,但只是使用简单的中间分配绕过屏蔽路径。这有任何意义吗?可能是什么原理?或者这是Java 7规范中的一个错误?

0 个答案:

没有答案