一、目录
- 泛型的介绍
- 泛型的好处
- 泛型的细节
- 泛型的练习
二、泛型的介绍
- 泛型又称参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题。
- 在类声明或实例化时只要指定好需要的具体类型即可。
- Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。
- 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
泛型的语法:
- 泛型的声明
interface 接口{}和class 类名<K,V>{}
比如:List、ArrayList…- 其中,T,K,V不代表值,而是表示类型。
- 任意字母都可以。常用T表示,是Type的缩写。
- 泛型的实例化
要在类名后面指定类型参数的值(类型)。如:- List strList = new ArrayList();
- Iterator iterator = customers.iterator();
三、泛型的好处
- 不能对加入到集合ArrayList中的数据类型进行约束(不安全的)。
- 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响。
四、泛型的细节
- interface List{}, public class HashSet{}…等等,这里的T、E只能是引用类型,不能是基本数据类型。例如Integer可以,但Int就不行。
- 在指定泛型的具体类型后,可以传入该类型或者其子类类型。
- 泛型使用形式:List list = new ArrayList();
- 在实际开发中,往往会采用简写的方式:List list = new ArrayList<>();编译器会默认<>里面就是Integer。
- 如果不写泛型,比如List list = new ArrayList(); 默认给它的泛型是Object。
五、泛型的练习
定义Employee类:
- 该类包含:private成员变量name、sal、birthday,其中birthday为MyDate类的对象;
- 为每一个属性定义getter、setter方法;
- 重写toString方法输出name、sal、birthday;
- MyDate类包含:private成员变量month、day、year;并为每一个属性定义getter、setter方法;
- 创建该类的3个对象,并把这些对象放入ArrayList集合中(ArrayList需使用泛型来定义),对集合中的元素进行排序,并遍历输出。
排序方法:调用ArrayList的sort方法,传入Comparator对象(使用泛型),先按照name排序,如果name相同,则按生日日期的先后排序。
package com.javageneric;
import java.util.ArrayList;
import java.util.Comparator;
public class JavaGeneric {
public static void main(String[] args) {
ArrayList<Employee> employees = new ArrayList<>();
employees.add(new Employee("Jack", 1000, new MyDate(13, 11, 1992)));
employees.add(new Employee("Tom", 11100, new MyDate(2, 1, 1982)));
employees.add(new Employee("Trump", 100000, new MyDate(19, 3, 1963)));
employees.add(