java - 内部类的通用可见性?

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

最佳答案

只需去掉 <String, Container>类声明中的位:

private class TheCache extends LinkedHashMap<String, Container> {

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

关于java - 内部类的通用可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275271/

相关文章:

java - 日历的 hibernate @CreationTimestamp @UpdateTimestamp

c# - IEnumerable 到 IReadOnlyCollection

java - 如何为具有未确定的 "?"值类型的 Java 通用映射添加值

java - 具有嵌套泛型的不可转换类型

java - 每次 git 推送都会删除未跟踪的文件

java - 使用相同的动画为多个 View 设置动画

javascript - 如何使用 Bootstrap 和 thymeleaf 在模态内填充表单的值?

c# - 将通用列表绑定(bind)到下拉列表

java - 无法使用通配符编译相关的 Java 泛型参数

java - Java 中的级联泛型类型声明