代码之家  ›  专栏  ›  技术社区  ›  d-man

泛型映射键应只允许两个类,值为一个类

  •  3
  • d-man  · 技术社区  · 6 年前

    使用泛型,我希望使我的方法参数化,以接受键(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
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Andy Turner    6 年前

    如果 A B 实现一个提供 getId() 方法,将通配符绑定到该方法:

    public void method(Map<? extends S, Model> map) {
    
        2
  •  0
  •   Jacob G.    6 年前

    因为 A B 两个扩展 S ,您的 map 可以简单地 S :

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

    你目前没有多少事可以限制其他孩子的 S 从你的地图中的键(直到Java得到密封类),除了创建一些接口,这两个 实现,然后使用该接口作为 地图 .