java—无法将类放入泛型Map中

lvmkulzt  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(553)

下面是问题的视觉效果:

从视觉上可以看出,ide显示了一个编译时错误,它不允许 class 插入Map。
以下是简化版本:

@Override
  public <T extends Comparable> void transactPersistentEntityStore(...) {
    Map<Class<T>, ComparableBinding> propertyTypeMap = new HashMap<>();
    propertyTypeMap.put(EmbeddedArrayIterable.class, EmbeddedEntityBinding.BINDING);
    propertyTypeMap.put(EmbeddedEntityIterable.class, EmbeddedEntityBinding.BINDING);
    // ...
  }

即使两者都是 EmbeddedArrayIterable 以及 EmbeddedEntityIterable 工具 Comparable 我是不是在泛型上遗漏了什么或者误解了什么?

js4nwp54

js4nwp541#

您可以将问题点简化为以下代码段:

public <T extends Comparable> void m1(T x) {
  Class<? extends Comparable> x1Class = x.getClass();
  Class<T extends Comparable> x2Class = x.getClass();
}

甚至是这样:

public <T> void m2(T x) {
  Class<?> x1Class = x.getClass();
  Class<T> x2Class = x.getClass();
}

带变量的行 x2Class 在这些方法中有一个错误。这是因为编译器丢弃了泛型,因此在运行时没有类型t。t是不可补偿的。无法在运行时获取类型t。
请看这篇文章:为什么以下类型在java中是可修改的和不可修改的?

相关问题