我的代码片看起来像我在下面粘贴的内容:
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方法。为什么呢?
答案 0 :(得分:3)
只需删除类声明中的<String, Container>
位:
private class TheCache extends LinkedHashMap<String, Container> {
它将“String”和“Container”视为通用类型标识符(通常为“T”)。因此,它不知道您所引用的Container是您的嵌套类。