泛型其实指得就是参数化类型,使得代码可以适应多种类型。像容器,List< T >,大量使用了泛型

它的主要目的之一就是用来指定容器要持有什么类型的对象

泛型只能只能代表引用类型,不能是原始类型,原始类型有byte/short/int/long 浮点型:float.double 字符型char 布尔型:boolean,引用类型与原始类型的区别在于虽然二者保存在栈中,但原始类型保存的是实际值,而引用类型保存的是一个对象的内存地址

泛型本质是obejct类型 ,是引用类型 ,int不是

HashMap<K,V>必须是对象类型的,但是你put的时候可以放入int类型,它内部会把基本类型转换成对应的包装类型

除此之外 map还可以put(null) 这样是可以的

测试一个没有泛型的map 

结果

注意的是,key值为null的是没有hashCode值的

还有一些比较有趣的结果,map的存放的确是以key值来排序的

P.S.一些干货知识(转载的)

泛型是源于C++,那里叫模板类,模板函数,用来解决不同类型参数的处理问题。(这主要源于Java和C++都是强类型语言,就是必须先定义了类型,中间还不能修改),泛型的?是通配符,相当于正规表达式,extends,表示这是后边这种类型的子类。? super T,表示都是T的父类。前者容易理解。后者通常是充分利用多态的特性。

既然 是集合,最简单的动作:往里放,和往外拿。问题是拿到的是什么?能够允许放的又是什么?这就需要限制。比如,投票箱,只能放选票,不能放苹果。而且投票箱,往里放了,当时就不能往外拿。这些都可以通过通配符的方式来实现。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐