首页 > 解决方案 > 泛型映射键应该只允许两个类并且值一个类

问题描述

使用泛型我想让我的方法参数化以接受键映射(A或B)和值作为模型,然后它转换为映射Map<UUID, Model>

问题是我在entry.getKey().getId()b/c 上遇到错误。我还没有定义什么是?关键。有人可以帮忙吗?

public void method(Map<?, Model> map) {
  Map<UUID, Model> transformation =
      map.entrySet().stream()
          .collect(
              Collectors.toMap(entry -> entry.getKey().getId(), entry -> entry.getValue()));
}

class S {
  protected UUID getId() {
    // return UUID
  }
}

class A extends S {}

class B extends S {}

class Model {
  // bla bla
}

标签: javagenerics

解决方案


如果AB实现提供该getId()方法的通用接口,则将通配符与该方法绑定:

public void method(Map<? extends S, Model> map) {

推荐阅读