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

  • 相关阅读:
    8.SpringMVC参数传递
    9.SpringMVC和json结合传递参数
    20160815命令行进入其他盘
    5.SpringMVC静态文件的访问
    6.SpringMVC注解启用
    7.SpringMVC注解优化
    3.SpringMVC修改配置文件路径和给界面传递数据
    rails
    SVN Merge合并 Patch打补丁
    Windows环境下怎么在文件夹下打开cmd命令行
  • 原文地址:https://www.cnblogs.com/BruceKing/p/13398174.html
Copyright © 2020-2023  润新知