首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java 7中泛型类的变量访问更改

Java 7中泛型类的变量访问更改
EN

Stack Overflow用户
提问于 2012-05-28 18:10:45
回答 3查看 1.9K关注 0票数 17

下面是一些使用Java6编译但不能在Java7中编译的代码的简单示例。

public class Test<T extends Test> {

  private final int _myVar;

  public Test(int myVar) {
    _myVar = myVar;
  }

  public int get(TestContainer<T> container){
    T t = container.get();
    return t._myVar;
  }

  private static class TestContainer<T extends Test> {
    private final T _test;
    private TestContainer(T test) {
      _test = test;
    }
    public T get(){
      return _test;
    }
  }
}

在Java7中,它无法在get(TestContainer<T> container)方法中编译,错误如下:

错误:_myVar在测试中具有私有访问权限

我不明白为什么它不再编译了--在我看来它应该编译。变量t的类型为T,它必须扩展Test。它试图从类Test中访问Test实例的字段_myVar

实际上,如果我将方法get(TestContainer<T> container)更改为以下内容,它将进行编译(没有任何警告):

public int get(TestContainer<T> container){
  Test t = container.get();
  return t._myVar;
}

  • 为什么它不再编译?
  • 这是Java6中的一个错误吗?如果是这样,为什么?
  • 这是Java7中的错误吗?

我已经用谷歌搜索了甲骨文的bug数据库,但没有找到任何关于这个的东西……

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10782876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档