packagecom.javaSe;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;/*1 JDK5.0之后推出的新特性:泛型
2 泛型这种语法机制,只在程序编译阶段起作用,只是给编译器作参考的。(运行阶段泛型没用!)
3 使用了泛型的好处是什么?
第一:集合中存储的元素类型统一了。
第二:从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”!
4 泛型的缺点是什么?
导致集合中存储的元素缺乏多样性!
大多数业务中,集合中的元素类型还是统一的,所以这种泛型特性被大家所认可。*/
public classGenericTest01 {public static voidmain(String[] args) {/*// 不使用泛型机制,分析程序存在的缺点
List myList = new ArrayList();
// 准备对象
Cat c = new Cat();
Bird b = new Bird();
// 将对象添加到集合当中
myList.add(c);
myList.add(b);
// 遍历集合,取出Cat让他抓老鼠,取出Bird让它飞。
Iterator it = myList.iterator();
while(it.hasNext()){*//*if (obj instanceof Cat){
((Cat) obj).catchMouse();
}else if(obj instanceof Bird){
((Bird) obj).fiy();
}*//*// 没有这个语法,通过迭代器取出就是Object
// Animal a = it.next();
// obj中没有move方法,无法调用,需要向下转型!
Object obj = it.next();
if(obj instanceof Animal){
Animal a = (Animal)obj;
a.move();
}
}*/
//使用JDK5之后的泛型机制//使用泛型List之后,表示List集合中只允许存储Animal类型的数据。//用泛型来指定集合中存储的数据类型
List list = new ArrayList();//指定List集合中只能存储Animal类型的对象,那么存储String类型就报错了。//这样用了泛型之后,集合中的元素数据类型更加统一了。//list.add("abc");//准备对象
Cat c = newCat();
Bird b= newBird();//将对象添加到集合当中
list.add(c);
list.add(b);//获取迭代器
Iterator it =list.iterator();while(it.hasNext()){//使用泛型之后,每一次迭代返回的数据都是Animal类型。
/*Animal a = it.next();
a.move();*/Animal a=it.next();if(a instanceofCat){
((Cat) a).catchMouse();
}if(a instanceofBird){
((Bird) a).fiy();
}
}
}
}classAnimal{public voidmove(){
System.out.println("动物在移动!");
}
}class Cat extendsAnimal{public voidcatchMouse(){
System.out.println("猫抓老鼠!");
}
}class Bird extendsAnimal{public voidfiy(){
System.out.println("鸟儿在飞翔!");
}
}