泛型概念
所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如:继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)。
为什么要使用泛型
比如需要你录入学生的成绩,在不使用泛型的情况下,数据类型并不确定,容易出现输入不一致的数据类型,而使用了泛型之后,会在编译期进行校验。
代码示例
不使用泛型的时候
@Test
public void dome1(){
ArrayList arrayList=new ArrayList();
// 录入学生成绩
arrayList.add(77);
arrayList.add(79);
arrayList.add(86);
arrayList.add(62);
// 不小心录入错误
arrayList.add("78s");
for (Object scores : arrayList){
// 会出现 ClassCastException异常
int score =(int )scores;
System.out.println(score);
}
}
使用泛型
@Test
public void dome2(){
ArrayList<Integer> arrayList2=new ArrayList<Integer>();
// 录入学生成绩
arrayList2.add(77);
arrayList2.add(79);
arrayList2.add(86);
arrayList2.add(62);
// 数据类型不一致编译无法通过
// arrayList2.add("78s");
for (Integer scores : arrayList2){
// 会出现 ClassCastException异常
int score =(int )scores;
System.out.println(score);
}
}
泛型的使用
- 泛型是jdk 5.0新特性
- 泛型的类型必须是类,不能是基本数据类型,如果要使用基本数据类型那么可以使用他们的对应的包装类型
- 泛型如果没有显示的指定,默认泛型为java.long.Object
- 多个泛型之间用,隔开 格式:< E1,E2,E3>
- 泛型不同的引用不能相互赋值
- 如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。
- 静态方法不能使用泛型。
- 异常类不能声明为泛型类