2009-11-04 60 views
2

可能重复:
What are the reasons why Map.get(Object key) is not (fully) generic为什么Java的Hashtable的get方法将Object作为参数?

从JDK文档,put方法:

public V put(K key, V value) 

但是,get方法:

public V get(Object key) 

任何想法?

注意:在我继承的某些代码中,存在一个错误,其中有人使用String作为带有Integer键的Hashtable的get方法的参数。

+0

我感觉到你的痛苦,我以前一直在这一点。失去的几个小时追踪它。 – 2009-11-04 16:02:37

回答

1

这允许任何Object相当于给定的键来获得值。

例如,您可能有两个类覆盖equals方法,以便在相互比较的情况下返回true。由于这些对象是等价的,它们都应该能够获得该值。

这与equals方法有Object参数的原因相同。

+0

但为什么不把A K作为参数?这样,至少编译器可以告诉我我犯了一个错误。 – abendigo 2009-11-04 16:01:51

+0

因为如果它只需要K类型的对象,那么即使该对象相当于K类型的对象,您也无法使用不同类型的对象获取该值。 – 2009-11-04 16:03:04

+0

也不会这样推理申请放? – alphazero 2009-11-04 16:04:13

0

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

它只是检查该Object的.equals方法以返回HashMap中的匹配项。

+0

但为什么不把K作为参数呢? – abendigo 2009-11-04 16:00:41

+0

这并不能解释为什么他们不会使用创建集合时提供的泛型类型。 – 2009-11-04 16:01:17

相关问题