内部类的通用可见性?

时间:2010-02-16 18:27:17

标签: java generics nested-generics

我的代码片看起来像我在下面粘贴的内容:

import java.util.LinkedHashMap;
import java.util.Map;

public class GenericMagic {
  GenericMagic() {
  }


  private class Container {
    int doSomething(){ return 42;}

    @Override
    public String toString() {
      return "Container"+doSomething();
    }
  }

  private class TheCache<String, Container> extends LinkedHashMap<String, Container> {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, Container> eldest) {
      Container value = eldest.getValue();
      value.doSomething();//if I comment this out it compiles
      System.out.println(value);
      return false;
    }
  }
}

在我的'TheCache'类中,我想将泛型类型约束为特定的,这很好,但是当我将'value'作为Container时,它以某种方式不被输入,因为我无法执行doSomething方法。为什么呢?

1 个答案:

答案 0 :(得分:3)

只需删除类声明中的<String, Container>位:

private class TheCache extends LinkedHashMap<String, Container> {

它将“String”和“Container”视为通用类型标识符(通常为“T”)。因此,它不知道您所引用的Container是您的嵌套类。