结论为上:
几乎所有你会以泛型写的程序都与处理集合有关,虽然泛型可以用在其他地方,但它主要目的还是让你能够写出有类型安全性的集合,也就是说,让编译器(这点很重要,是编译器负责检查集合,而数组是由虚拟机检查)能够帮忙防止你把Dog加到Cat群中。
看《Java核心技术卷Ⅰ》关于“泛型程序设计”这一章有没有听到脑仁飞速转动和脑壳的摩擦声,但还是一脸懵逼,不知所云。其实泛型有很多东西要知道,但对于大部分程序员,其实只有4件事重要:
(1)定义泛型类
public class ArrayList<E> extends AbstractList<E> implements List<E> ...
{
public boolean add(E o)
//more code
}
(2)创建被泛型化类 (例如ArrayList)的实例
new ArrayList<Song>()
(3)声明与指定泛型类型的变量
List<Song> songList = new ArrayList<Song>()
(4)声明(与调用)取用泛型类型的方法
void foo(List<Song> list)
{
//codes
}
x.foo(songList)
详述如下:
证明数组形式编译和运行都没有问题。
证明泛型形式编译就报错
下图中的两个关系图说明了固定类型间不存在继承关系(呼应于P574中“类型变量不具有多态性”)
数组形式(把Cat放到Dog中)证明编译可以通过,但运行时报错
参考:《Head First Java 2nd Edition》、《Java核心技术卷Ⅰ》
如果大家喜欢这篇文章的话,希望大家收藏、转发、关注,转载请注明出自这里。 PS:本随笔属个人学习小结,文中内容有参考互联网上的相关文章。如果您博文的链接被我引用,我承诺不会参杂经济利益。其中如果发现文中有不正确的认知或遗漏的地方请评论告知,谢谢! 还是那句话:不是我喜欢copy,是站在巨人的肩膀上~~