泛型:只在程序编译阶段起作用,给编译器参考的,泛型的优点就是统一了集合中的元素类型,取出元素时不太需要大量地向下转型。但是也会导致集合中的元素缺乏多样性!
package com.javastudy.example09; import javax.swing.text.html.HTMLDocument; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class FanXing { public static void main(String[] args) { //不使用泛型 List list=new ArrayList(); list.add(new Bird()); list.add(new Cat()); Iterator it=list.iterator(); while(it.hasNext()){ Object obj=it.next(); //不使用泛型 向下转型 if(obj instanceof Bird){ Bird x=(Bird)obj; x.move(); } if(obj instanceof Cat){ Cat x=(Cat)obj; x.move(); } } System.out.println("===================="); //使用泛型 List<Bird> list2=new ArrayList<Bird>(); list2.add(new Bird()); //list2.add(new Cat()); 错误,不兼容 Iterator<Bird> it2=list2.iterator(); while(it2.hasNext()){ Bird b=it2.next(); b.move(); } //泛型的自动类型推断 List<Cat> list3=new ArrayList<>(); list3.add(new Cat()); //list3.add(123); 错误 } } class Bird{ public void move(){ System.out.println("bird fly"); } } class Cat{ public void move(){ System.out.println("cat floot"); } }
运行截图
自定义泛型与增强for循环
package com.javastudy.example09; import java.util.ArrayList; import java.util.*; public class DiyFanX_ForEach<c123>{ public void doS(c123 x){ System.out.println(x); } public static void main(String[]args){ DiyFanX_ForEach<String> diy=new DiyFanX_ForEach(); diy.doS("123"); //增强for循环 System.out.println("================="); List<String> list=new ArrayList<>(); list.add("123"); list.add("555"); list.add("666"); //遍历 for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } System.out.println("================="); for (String s:list) { System.out.println(s); } } }
运行截图