代码之家  ›  专栏  ›  技术社区  ›  Marty Pitt

Java映射:为什么get(object)不get(K)[[副本]

  •  6
  • Marty Pitt  · 技术社区  · 15 年前

    可能重复:
    Java Generics: Why Does Map.get() Ignore Type?

    V put(K key,V value);
    V get(Object key);
    

    为什么是 get 不定义为:

    V get(K key)
    

    类似地,为什么这些方法被类型化为 Object K V 分别?

    boolean containsKey(Object key); // Why not K?
    boolean containsValue(Object value); // Why not V?
    

    这是一个向后兼容的东西(1.5之前)?

    2 回复  |  直到 9 年前
        2
  •  0
  •   Benoit Courtine    15 年前

    模板的目标是在编译时强制控制(不能将Cat放在Dog列表中),并通过抑制显式强制转换来简化程序员的代码。

    在这些方法中,不需要模板。如果你比较(与“等于”猫和狗),它没有发病率。另外,两个不同类的对象可以“相等”!过于严格的方法签名将限制映射的使用。