我有一段代码看起来像我在下面粘贴的内容:
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方法。为什么?
最佳答案
只需去掉 <String, Container>
类声明中的位:
private class TheCache extends LinkedHashMap<String, Container> {
它将“String”和“Container”视为通用类型标识符(通常为“T”)。所以它不知道您所指的 Container 是您的嵌套类。
关于java - 内部类的通用可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275271/