java - 为什么参数的私有(private)字段在 Java 6 中对泛型方法可见,但在 Java 7 中不可见?

标签 java generics java-7 private-members generic-method

<分区>

Possible Duplicate:
Type-parameterized field of a generic class becomes invisible after upgrading to Java 7

public class Test{

    private String _canYouSeeMe = "yes";

    <T extends Test> void genericMethod(T hey){
        String s = hey._canYouSeeMe;
    }

    void method(Test hey){
        String s = hey._canYouSeeMe;
    }   
}

当针对 JDK 1.6 构建时,编译得很好,但针对 1.7,在 genericMethod() 中存在编译器错误: 字段 Test._canYouSeeMe 不可见

可以通过使 _canYouSeeMe protected 而不是私有(private)来解决该错误,但我只是想知道从 1.6 到 1.7 发生了什么变化

最佳答案

类 (Test) 的子类 (T) 从不 可以访问父类(super class)的私有(private)字段。这可能是 Java 6 编译器中的错误,已在 Java 7 中修复。

记住:T extends Test 表示TTest 的子类。它意味着T 的类是Test.class,这是拥有私有(private)字段和方法访问的必要条件。

关于java - 为什么参数的私有(private)字段在 Java 6 中对泛型方法可见,但在 Java 7 中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761358/

相关文章:

java - intern() 在 Java 6 和 Java 7 中的行为不同

java - AsycTask 不执行

java - Jmeter:groovy 脚本中 jmeter 对象的包装器

java - 重置 hsqlDB、java 中的光标位置

java - 为 toArray 方法创建通用数组

c# - 使用枚举值创建泛型类型

java - OpenJPA - 事务管理不可用...(Fuse ESB)

java - 继承和多个合作者

java - Gephi + Neo4J 插件 + Mac (Java7)

java - Java 7 语法中的分隔标识符可以简化为限定标识符吗?