什么是泛型
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的Java语言中的标志是一组尖括号<....>
泛型的优点
Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
详细的说:
- 类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(可能还存在于代码注释中)。
- 消除强制类型转换。泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
- 潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
为什么要有泛型
在jdk1.5之前时候是没有泛型的
那时候若想达到类似泛型的功能
可以通过多态等特征去实现
两条性质
1,Object类是所有类的祖先类
2,多态:上层的引用指向下层的对象
由于这两条特性使得Object类型的引用可以执行任意类型的对象
假设我们在写代码时需要的是String类型的对象,但是倘若传入别的类型的对象也不会报错,程序可以正常运行,原因就是以上两条性质使得Object类型的引用可以执行任意类型的对象。
但是其实传入的对象类型是错误的,不是我们想要的,但是我们当时并不能发现,直到我们可能已经过了很久使用这个数据时才发现它并不是我们想要的类型。