为什么Map.get(Object key)不是(完全)泛型的原因是什么
决定在 java.util.Map<K, V> 接口中没有完全通用的get方法的背后原因是什么? 为了澄清问题,该方法的签名是 V get(Object key) 代替 V get(K key) 我想知道为什么(与 remove, containsKey, containsValue )。 #1楼 这是 Postel法则 的一种应用 , “对您的工作要保守,对别人接受的东西要宽松”。 不论类型如何,都可以执行相等性检查。 equals 方法在 Object 类上定义,并接受任何 Object 作为参数。 因此,对于密钥等效性以及基于密钥等效性的操作来说,接受任何 Object 类型都是有意义的。 映射返回键值时,通过使用type参数,它可以保存尽可能多的类型信息。 #2楼 还有一个重要的原因,因为它破坏了Map,因此在技术上无法完成。 Java具有像 <? extends SomeClass> <? extends SomeClass> 。 标记为此类引用可以指向使用 <AnySubclassOfSomeClass> 签名的类型。 但是多态泛型使该引用 变为只读 。 编译器仅允许您将泛型类型用作方法的返回类型(如简单的getter),但会阻止使用泛型为参数的方法(如普通的setter)。 这意味着您是否编写 Map<? extends KeyType, ValueType> Map