package com.javase.collection.generic泛型;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 关于泛型:
* 1.泛型是JDK5.0之后推出的新特性
* 2.泛型这种语法机制,只是在程序编译阶段起作用,只是给编译器参考的(运行阶段泛型没用!)
* 3.使用泛型的优点:
* - 集合中存储的元素类型统一了。
* - 从集合中取出的元素是泛型指定的类型,减少了“向下转型”的操作。
* 4.使用泛型的缺点:
* - 导致集合中存储的元素缺乏多样性。
*/
public class GenericText {
public static void main(String[] args) {
// 采用泛型来创建集合(指定List集合中只能存储Animal,存储其他类型就会报错)
// List<Animal>这里写上泛型<Animal>以后,new ArrayList<>()这里的<>就可以不写,程序能够自动推断,这是JDK8以后的新特性。
List<Animal> myList = new ArrayList<>();
// 创建动物对象
Cat c = new Cat();
Bird b = new Bird();
// 向集合中添加元素
myList.add(c);
myList.add(b);
// 获取迭代器,该迭代器迭代的是Animal类型
Iterator<Animal> iterator = myList.iterator();
// 遍历集合
while (iterator.hasNext()){
Animal a = iterator.next(); //不使用泛型这里获取对象的类型只能是Object类型,使用泛型之后就是泛型所指定的类型
a.move();
}
System.out.println("-----------------------------");
Iterator<Animal> iterator1 = myList.iterator();
while (iterator1.hasNext()){
Animal a = iterator1.next();
// 调用子类特有的方法还是需要向下转型的
if (a instanceof Cat){
Cat cat = (Cat)a;
cat.catchMouse();
}
if (a instanceof Bird){
Bird bird = (Bird)a;
bird.fly();
}
}
}
}
class Animal{
public void move(){
System.out.println("动物在移动!");
}
}
class Cat extends Animal{
public void catchMouse(){
System.out.println("猫在抓老鼠!");
}
}
class Bird extends Animal{
public void fly(){
System.out.println("鸟儿在飞行!");
}
}
Java关于泛型
于 2022-12-19 09:40:49 首次发布