1

我有一个类似于我在下面粘贴的代码片段:

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”类中,我想将泛型类型限制为特定类型,这很好,但是当我将“值”作为容器获取时,它不知何故没有输入,因为我无法执行 doSomething 方法。为什么?

4

1 回答 1

3

只需摆脱<String, Container>类声明中的位:

private class TheCache extends LinkedHashMap<String, Container> {

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

于 2010-02-16T18:32:30.770 回答