为什么Java中的HashMap<K, V>的get函数是get(Object key),而不是get(K key)?
帮别人的代码改bug,发现有一大堆bug是由get或者remove传递进去的参数类型不匹配而造成的。
比如:
这时编译器不干了,它表示不能工作了。
原来在S<K>类的定义中,我们明确contains(K k)函数只能接受一个明确类型的参数。
但是在doSomeReading函数中,编译器无法确定到底是什么类型,它是Foo类型,还是SubFoo类型,还是SubSubFoo类型?
编译器无从得知,所以它只允许null类型的参数。
===========================================================
对于这个解析,话说还是有点郁闷。
也有另外的解析,认为和equals函数有关系。不过感觉不大靠谱,这个只能说是一些另类的应用。
http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not-fully-generic