欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

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();
        }
    }
}

 

posted @ 2020-07-29 16:57  萧静默  阅读(145)  评论(0编辑  收藏  举报