使用泛型
主讲教师:王少华 QQ群:483773664
学习目标:
- 理解使用泛型的必要性
- 掌握使用Java泛型
一、为什么使用泛型
Java集合有一个缺点:Java集合会把我们“丢进”集合的元素默认为Object类型,没有记住元素本身的类型。当然,Java这样设计是有原因的:因为设计集合的程序员不会知道我们需要用这个集合来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对易用。
这样设计会存在以下问题
- 集合对元素类型没有任何限制,这样可能引发一些问题。比如我们创建一个集合用于存放Person对象,但是程序可以轻易的将Dog对象放入这个集合中。
- 因为集合没有记住无素本身的类型,所以在取出这些元素时,要进行强制类型转换。这样就可能发生“类型转换异常(ClassCastException)"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
总结:要使用泛型(Generic)原因
- 解决元素存储的安全性问题
- 解决获取数据元素时,需要类型强制转换问题
二、手动实现类型检查
(一)、代码实现及验证
如果我们想要一个List对象,只能存放String对象,那么我们要对ArrayList进行扩展。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
使用上面的List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
(二)、问题来了
上面的方法虽然已经很好的解决了Java集合原先存在的二个缺点,但如果将这种实现方式应用到实际项目开发中,是一件很恐怖的事情。因为我们要定义很多List子类。Java工程师肯定不会这么傻,那么Java又是如何解决这些问题的呢?
三、使用泛型
(一)使用泛形
从JDK1.5以后,Java允许我们在创建集合时指定集合元素的类型。Java的参数化类型被称为泛型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
(二)对象实例化时不指定泛型,默认为Object
1 2 3 4 5 6 7 8 |
|
(三)泛型不同的引用不能相互赋值
(四)使用泛形时,泛形类型须为引用类型,不能是基本数据类型
四、学习视频网址:
http://edu.51cto.com/course/course_id-6083.html