泛型的概述
- Java泛型(generics)是JDK1.5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
- 早期的时候,使用Object来代表任意类型。但是这样在向上转型时没有问题的,但是向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。所以Java在JDK1.5之后提供了泛型来解决这个问题
- 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
- 泛型是一种类型的明确工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。
注意:类型参数只能代表引用类型,不能是原始类型(例 int,double,char等)。
泛型可以使用在 方法、接口、类 分别称作为:泛型类、泛型方法、泛型接口。
示例代码
package com.collection.Demo05;
import java.util.ArrayList;
import java.util.Iterator;
public class Test01 {
public static void main(String[] args) {
// 定义ArrayList集合,所存放的类型都是String类型
// 泛型是在编译阶段 限制 类型 就是为 泛型指定的类型
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("mayikt");
// arrayList.add(1)//只能存放String类型
/**
* JDK1.5之前没有泛型
* new 集合 没有指定泛型
* 存放的类型是为Object类型
* 下面演示JDK1.5没有泛型如何处理
*/
ArrayList<Object> arrayList1 = new ArrayList<Object>();
ArrayList arrayList2 = new ArrayList();//上下两句等价,默认泛型是Object
arrayList2.add("mayikt01");
arrayList2.add("mayikt02");
arrayList2.add("mayikt03");
arrayList2.add(666);//编译时不会报错,∵都是Object类型,下面将Object —> String,在转换时这行就会报错,
// 在if(object instanceof String) 只将Object为String类型的转为String,这个Integer类型不转,
// 就会忽略这个元素,不会报错,也不会遍历,想让该Integer类型遍历出来,就需要在写一个if(object instanceof Integer)
Iterator iterator = arrayList2.iterator();
while (iterator.hasNext()) {
//如果取出ArrayList 集合中的元素 类型是Object类型
//类型抓换 Object -> String
//为了类型转换异常——需要先判断类型
Object object = iterator.next();
//如果object元素的类型是为String
if (object instanceof String) {
String str = (String) object;
System.out.println(str);
}
if (object instanceof Integer) {
Integer integer = (Integer) object;
System.out.println(integer);
}
// String str = (String) iterator.next();
// System.out.println(str);
// System.out.println(iterator.next());
}
}
}
下一篇文章:泛型类