大家好,我是雄雄,今天给大家带来的是关于泛型集合的技能点。
前言
大家都知道,Arrays工具类中,有一个方法,asList可以把一个变长参数或者数组转换成列表,但是它有个缺点,就是它所生成的List的长度是不可变的,而这在我们实际开发中,是很不方便的,如果我们想要List的长度可以改变,那就得自己写一个工具类了,下面我们就来看看自己怎么写这个工具类和该工具类的特点以及用法。
01
可变长度的集合工具类
代码如下:
代码分析,以上这段代码很简单,就是我们传入一个泛型参数,程序给我们返回一个List。下面我们来调用一下:
02
调用工具类说明
接着我们来分别分析一下这三个变量:
list1:这个比较简单,是正常用法,泛型实际参数类型是String,返回的结果也是
List
list2:因为我们没有在调用的时候给方法传入参数,故无法直接看出来是什么类型。不过,在这,编译器会很聪明的推断出最顶层类Object就是其泛型类型,可以这么说,list2的完整写入如下:
那么,如果我们想要list是个Integer>类型,而不是Object类型,那么应该怎么做呢?我们可以强制声明泛型类型,代码如下:
是不是看起来很简单,asListUtils()方法要求输入的是一个泛型参数,那么我们在输入之前定义这是一个Integer类型的参数,那输出也是Integer类型的结合了。
List3:这个集合有两种类型的参数,整数和小数。那它产生的list是什么类型的?是Integer和float的父类Number?不,它还没这么高级的,其实它是这样推断的,如果发现参数类型不一致时,就会直接确认为Object,那我们想要让它参数类型为Number的话应该怎么办?和list差不多,直接修改为:
Number是Integer和Float的父类,先把三个输入参数向上转型为Number,那么返回的结果也就是List类型了。
通过强制泛型参数类型,我们明确了泛型方法的输入、输出参数类型,问题是我们要在什么时候明确泛型类型呢?一句话:无法从代码中推断出泛型类型的情况下,即可强制声明泛型类型。
本文参考自:《编写高质量代码:改善java程序的151个建议》
作者:秦少波
领取专属 10元无门槛券
私享最新 技术干货