为什么Java';s哈希表';s get方法是否将对象作为参数?

为什么Java';s哈希表';s get方法是否将对象作为参数?,java,generics,Java,Generics,可能重复: 从JDK文档中,put方法: public V put(K key, V value) 但是,get方法: public V get(Object key) 有什么想法吗 注意:在我继承的一些代码中,有一个bug,有人使用字符串作为带有整数键的哈希表的get方法的参数。这允许任何与给定键等效的对象获取值 例如,您可能有两个类重写equals方法,以便在相互比较时返回true。因为对象是等价的,所以它们都应该能够获得值 这也是equals方法有一个对象参数的原因。get方

可能重复:

从JDK文档中,put方法:

  public V put(K key, V value)
但是,get方法:

  public V get(Object key)
有什么想法吗


注意:在我继承的一些代码中,有一个bug,有人使用字符串作为带有整数键的哈希表的get方法的参数。

这允许任何与给定键等效的
对象获取值

例如,您可能有两个类重写
equals
方法,以便在相互比较时返回true。因为对象是等价的,所以它们都应该能够获得值


这也是equals方法有一个
对象
参数的原因。

get
方法将任何
对象
作为键,因为任何对象都可以存储在
HashMap
中(因为所有对象都是
对象
类型的子类)


它只是检查该
对象的.equals方法,以返回
HashMap

中的匹配项,但为什么它不将K作为参数?这并不能解释为什么它们在创建集合时不使用提供的泛型类型。但为什么它不将K作为参数?这样,至少编译器可以告诉我我犯了一个错误。因为如果它只使用K类型的对象,那么你将无法使用不同类型的对象获得值,即使该对象与K类型的对象等价。这种推理不也适用于put吗?我感觉到你的痛苦,我以前被这个对象咬过。花了几个小时追踪它。