泛型概述
一、泛型概述
- 泛型(Generic),JDK1.5推出的新特性
- 作用:对集合中的类型进行限定,可以把类型当作参数传递
- 概念:泛型是一种把类型明确的工作推迟到对象的创建或方法的调用之后的特殊类型(类型参数化)
二、泛型的由来
-
由下图代码可知,当list集合中添加不同类型的元素(Object和Integer型)时,虽不会报错,但是当代码遍历list集合时,便会出现类型转换异常的错误
-
类型转换异常:java.lang.ClassCastException
-
由于集合在添加元素的时候可以添加任何引用类型的对象,但是遍历时因为类型不统一,很容易出错,所以java就使用了限制集合类型的方式来避免错误,这种限制集合类型的机制就叫做泛型
-
如果给集合添加了泛型,集合在添加元素的时候就会对类型进行检测。这样就能把运行时出错的可能提前到了代码的编译期
三、泛型的应用
- 格式:<数据类型>
- 限制数据类型之后集合中只能添加被限定的数据类型,否则会报错(如下图)
package com.generic.demo;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
// list.add(10); //自动装箱,相当于new Integer(10)
// list.add(new Integer(10));
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String next = iterator.next(); //此处无需强制类型转换
System.out.println(next); // hello
}
}
}
四、使用泛型的好处
- 避免了程序运行时,由于集合内部元素数据类型不一致而导致的错误
- 迭代元素的时候不需要强制类型转换
- 可以消除由于没有添加泛型导致程序出现的警告
- (无需使用@SuppressWarnings(“all”)来压制警告)
五、泛型的注意事项
- 尖括号中的数据类型只能是引用数据类型
- 泛型推断(JDK1.7的新特性)
- 有左有右可以
- 有左没右可以
- 没左有右不可以(泛型不起作用)
ArrayList<String> list = new ArrayList<String>(); // 可以
ArrayList<String> list = new ArrayList(); // 可以,但不推荐使用
ArrayList list = new ArrayList<String>(); // 不可以,泛型不起作用
六、泛型的应用场景
- 接口
- 方法
- 类、抽象类