具有参数化集合的泛型?

恶魔

我正在尝试创建一个 HashMap 版本,如果输入重复键,它不会替换该值,但实际上将两个相应的值添加在一起。键值必须是类型,Number以便可以进行添加。但是,它似乎不明白 myV是 type Number,或者至少在我尝试调用super.put. 就好像VinHashMap实际上与V我声明的不一样extend Number

这里发生了什么?

public class AdditiveMap<K, V extends Number> extends HashMap<K, V>
{
    @Override
    public V put(final K key, final V value)
    {
        if (containsKey(key))
            // Second param Found 'Number', required 'V'
            super.put(key, (Number)(get(key).intValue() + value.intValue()));
        else 
            super.put(key, value);
    }
}
安迪·特纳

不要Mapput方法中创建一个这样做的Map.put方法的契约是(强调我的):

将指定值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值(当且仅当 m.containsKey(k) 返回 true 时,才称映射 m 包含键 k 的映射。)

因此,您的地图将违反界面契约。

当然,您可以自由添加AdditiveMap.addValuesTogether(或其他)方法。但是你最好只使用现有的merge方法:

map.merge(key, newValue, v -> v + newValue);

这样做的主要好处是,这个相同的语法适用于所有数字类型(嗯,intlongfloatdouble,你需要的铸造shortchar并且byte因为他们扩大至int当您添加它们,您可以通过使用避免了明确的投v -> v += newValue); 但实际上你不能做你想做的一般性的事情(没有提供一个Merger<V>策略,可以将 a 添加V到另一个V; 与使用这种现有方法相比,这只是非常重量级)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java泛型-具有“扩展”类型的集合参数的方法拒绝有效的参数?

来自分类Dev

具有泛型类型的泛型集合生成

来自分类Dev

具有泛型类型的泛型集合生成

来自分类Dev

具有泛型的Java排序集合

来自分类Dev

在集合中存储具有不同泛型类型参数的项目

来自分类Dev

无法在具有泛型的方法中将集合类作为参数传递

来自分类Dev

特定枚举类型的“集合”,但具有泛型

来自分类Dev

Java泛型:具有嵌套通配符参数的赋值

来自分类Dev

具有类参数的泛型类型推断

来自分类Dev

具有相同泛型参数的重载方法?

来自分类Dev

具有可选泛型参数的扩展方法

来自分类Dev

具有泛型方法和参数的重载方法

来自分类Dev

具有多个类型参数的泛型推断类型

来自分类Dev

具有类型依赖参数的 TypeScript 泛型方法

来自分类Dev

无法模拟具有泛型参数的方法

来自分类Dev

从具有泛型参数的子类方法调用构造函数

来自分类Dev

具有参数类型限制的泛型不能传递给具有非泛型参数的方法

来自分类Dev

将具有泛型参数的静态方法转换为泛型类

来自分类Dev

在具有不同泛型参数的抽象类中返回泛型是不好的做法

来自分类Dev

使泛型类的函数仅接受具有相同泛型类型但受更多约束的参数

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

具有两个泛型参数的C#中的泛型方法

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

具有不同类型泛型参数的方法的泛型类

来自分类Dev

如何使用已知类型作为参数创建具有泛型的泛型类?

来自分类Dev

具有模板专业化的泛型类型转换

来自分类Dev

具有继承的泛型

来自分类Dev

泛型:尝试将参数化的集合传递给List addAll方法

来自分类Dev

Scala:具有参数或泛型类型参数的方法,该方法返回Future

Related 相关文章

  1. 1

    Java泛型-具有“扩展”类型的集合参数的方法拒绝有效的参数?

  2. 2

    具有泛型类型的泛型集合生成

  3. 3

    具有泛型类型的泛型集合生成

  4. 4

    具有泛型的Java排序集合

  5. 5

    在集合中存储具有不同泛型类型参数的项目

  6. 6

    无法在具有泛型的方法中将集合类作为参数传递

  7. 7

    特定枚举类型的“集合”,但具有泛型

  8. 8

    Java泛型:具有嵌套通配符参数的赋值

  9. 9

    具有类参数的泛型类型推断

  10. 10

    具有相同泛型参数的重载方法?

  11. 11

    具有可选泛型参数的扩展方法

  12. 12

    具有泛型方法和参数的重载方法

  13. 13

    具有多个类型参数的泛型推断类型

  14. 14

    具有类型依赖参数的 TypeScript 泛型方法

  15. 15

    无法模拟具有泛型参数的方法

  16. 16

    从具有泛型参数的子类方法调用构造函数

  17. 17

    具有参数类型限制的泛型不能传递给具有非泛型参数的方法

  18. 18

    将具有泛型参数的静态方法转换为泛型类

  19. 19

    在具有不同泛型参数的抽象类中返回泛型是不好的做法

  20. 20

    使泛型类的函数仅接受具有相同泛型类型但受更多约束的参数

  21. 21

    C#泛型类作为参数,与泛型类的调用方法具有相同的T

  22. 22

    具有两个泛型参数的C#中的泛型方法

  23. 23

    C#泛型类作为参数,与泛型类的调用方法具有相同的T

  24. 24

    具有不同类型泛型参数的方法的泛型类

  25. 25

    如何使用已知类型作为参数创建具有泛型的泛型类?

  26. 26

    具有模板专业化的泛型类型转换

  27. 27

    具有继承的泛型

  28. 28

    泛型:尝试将参数化的集合传递给List addAll方法

  29. 29

    Scala:具有参数或泛型类型参数的方法,该方法返回Future

热门标签

归档