一、泛型简介
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。换句话说就是起到了对数据的类型的限制作用。
Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。
解决的主要问题:
- 解决了元素存储的安全性问题;
- 解决了获取元素时,需要类型强制转换的问题;
二、泛型的使用
泛型最多的还是集合中使用。
①在实例化集合类时,可以指明具体的泛型类型 ;
②指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法,构造器,属性等)使用
- 比如:add(E e) ----->实例化以后 : add(Integer e)
③注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换;
④如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型;
- 下面的例子演示了如何使用泛型方法打印不同类型的数组元素:
/**
* 下面的例子演示了如何使用泛型方法打印不同类型的数组元素:
* @Author duokanzhouzhou
* @Create 2021/8/15
*/
public class GenericArrayTest {
public static <E> void printArray(E[] inputArray){
for (E ele : inputArray){
System.out.print(ele);
}
System.out.println();
}
public static void main(String[] args) {
Integer[] intArray = {
1,2,3,4,5,6};
Double[] doubleArray = {
1.2,2.3,4.2,6.5,7.7};
Character[] charArray = {
'A','E','P','I'};
printArray(intArray);
printArray(doubleArray);
printArray(charArray);
}
}
- 下面是在集合中的使用情况:
public class GenericTest {
@Test
/*在集合中使用泛型之前的情况 :*/
public void test1(){
ArrayList arrayList = new ArrayList();
//需求: 存入学生的成绩
arrayList.add(123);
arrayList.add(234);
arrayList.add(33);
arrayList.add(93);
/* 问题一 : 类型不安全 */
//arrayList.add("MM");
for (Object score : arrayList){
/* 问题二 : 强转时,可能出现ClassCastException */
int s = (Integer) score;
System.out.println(score);
}
}
@Test
/**
* 在集合中使用泛型的情况 :
*/
public void test2(){
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//需求: 存入学生的成绩
arrayList.add(123);
arrayList.add(234);
arrayList.add(33);
arrayList.add(93);
//编译时,就会进行类型检查,保证数据的安全
//arrayList.add