java-集合框架-泛型2-泛型限定
package cn.burce.Genetic; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import cn.burce.Hotel.*; public class GeneticLearnHotel { /* * 将酒店的员工,厨师、服务员、经理分别存在3个集合里 定义方法,可以同时遍历3个集合,并调用工作方法 */ public static void main(String[] args) { ArrayList<Cooker> c = new ArrayList<>(); ArrayList<Waiter> w = new ArrayList<>(); ArrayList<Manager> m = new ArrayList<>(); c.add(new Cooker("厨师1", 1011)); c.add(new Cooker("厨师2", 1012)); c.add(new Cooker("厨师3", 1013)); w.add(new Waiter("服务员1", 1021)); w.add(new Waiter("服务员2", 1022)); w.add(new Waiter("服务员3", 1023)); m.add(new Manager("经理", 1030, 1000)); // ArrayList<String> m = new ArrayList<>(); 不是employee的子类报错 function(c); function(w); function(m); } /* * 定义方法,可以同时遍历3集合,并调用方法 ?通配符,迭代器it.next()取出来的是object类型,调用不了方法 * 强制转换:it.next()=object o ==>employee 这样有风险,假设集合里不全是employee的子类就报错了 * 方法参数形式:控制住,参数只可以传递employee对象或者其子类 泛型的限定,本案例,父类固定为employee,子类可以是无限种 * 用?extends Employee 限制父类,上限限定 可以传递employee或者其子类 * 用?super Employee 限制子类,下限限定可以传递employee或者其父类 */ public static void function(ArrayList<? extends Employee> coll) { Iterator<? extends Employee> it = coll.iterator(); while (it.hasNext()) { //System.out.println(it.next().getName());不知道为啥一加就报错 it.next().work(); } } }