美文网首页
为什么Java中Map接口的get函数参数竟然是Object

为什么Java中Map接口的get函数参数竟然是Object

作者: 丨飞翔的蛋花丨 | 来源:发表于2015-05-21 13:56 被阅读1400次

文章来源于自己实际开发项目中遭遇到的一个问题。在一开始,我定义了一个

Map<Integer, String> map;

这并没有说明问题,然后开始往下写了一堆函数,在写到第N个函数的时候,我发现这个map需要改成

Map<String, String> map;

改完之后我天真的以为ide能帮我检查出所有需要修改的地方,我只需要按照列出的红线一个一个的把传入参数的类型修改好就可以了,于是毫无疑问的,我的程序最后败在了这个地方

map.get(someIntegerParam);

改正程序中的问题只是一方面,更重要的是,为什么这个get函数就要这么特别,为什么不和put一样用范型作为参数呢!?google了一把,在stackoverflow上也有不少人问过这个问题,其中这一篇说的算比较好的,大概的意思就是说如果采用范型作为get的参数并不能很好的体现出map的精神,因为key是否相等,取决于key1.equals(key2)是否成立,这里并不应该限制类型。在sof上的另外一篇文章也阐述了这个问题,并引用了Josh Bloch的一段话:

Josh Bloch says (6:41) that they attempted to generify the get method of Map, remove method and some other, but "it simply didn't work". There are too many reasonable programs that could not be generified if you only allow the generic type of the collection as parameter type. The example given by him is an intersection of a List of Numbers and a List of Longs.

大概意思就是说我们曾经尝试过把get方法范型化,但是它挂了,有很多很多原因使他不能被范型化,比如你用List<Number>做key,但却想用List<Long>get

相关文章

  • 为什么Java中Map接口的get函数参数竟然是Object

    文章来源于自己实际开发项目中遭遇到的一个问题。在一开始,我定义了一个 这并没有说明问题,然后开始往下写了一堆函数,...

  • Java 集合框架(Map 接口)

    Map 接口简介 对于 Map 接口,Java的官方文档是这样介绍的: A Map is an object th...

  • Java 8 中的 java.util.Map#computeI

    Java8之前,从map中根据key获取value操作可能会有下面的操作 Object key = map.get...

  • python内置函数map和zip

    一、map 作用 map: 自动将可迭代对象遍历,把遍历出来的数据,当成参数传入map第一个接口的函数中,将函数执...

  • Java 泛型Type

    Java中的Type 接口 ParameterizedType 参数化类型 作用于类、参数类型上,如Map , f...

  • java day 14

    Map java Map及Map.Entry详解Map是java中的接口,Map.Entry是Map的一个内部接口...

  • Java中map.get(Object key)的疑问

    案例描述 对Java中map的get方法有些模糊,下面的代码会返回value吗? 结果是肯定的。 原因 Map接口...

  • 函数式接口

    为什么需要函数式接口? 在函数式编程思想下,允许把函数本身作为参数传入另一个函数。Java中使用函数式接口来实现“...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Java8 - Map更优雅的迭代方式:forEach

    用于两个参数之间进行操作的函数式接口是 BiConsumer。这个函数式接口正好用来操作 Map 的 key 和 ...

网友评论

      本文标题:为什么Java中Map接口的get函数参数竟然是Object

      本文链接:https://www.haomeiwen.com/subject/wrwlqttx.html