zoukankan      html  css  js  c++  java
  • 泛型系列教材 (一)- Java 什么是 泛型?

    步骤1:不使用泛型
    步骤2:使用泛型
    步骤3:子类对象
    步骤4:泛型的简写
    步骤5:练习-泛型
    步骤6:答案-泛型

    示例 1 : 不使用泛型

    不使用泛型带来的问题
    ADHero(物理攻击英雄) APHero(魔法攻击英雄)都是Hero的子类
    ArrayList 默认接受Object类型的对象,所以所有对象都可以放进ArrayList中
    所以get(0) 返回的类型是Object
    接着,需要进行强制转换才可以得到APHero类型或者ADHero类型。
    如果软件开发人员记忆比较好,能记得哪个是哪个,还是可以的。 但是开发人员会犯错误,比如第20行,会记错,把第0个对象转换为ADHero,这样就会出现类型转换异常

    package generic;

    import java.util.ArrayList;

    import charactor.ADHero;

    import charactor.APHero;

    public class TestGeneric {

        public static void main(String[] args) {

             

            ArrayList heros = new ArrayList();

             

            heros.add(new APHero());

            heros.add(new ADHero());

             

            APHero apHero =  (APHero) heros.get(0);

            ADHero adHero =  (ADHero) heros.get(1);

             

            ADHero adHero2 =  (ADHero) heros.get(0);

        }

    }

    示例 2 : 使用泛型

    使用泛型的好处:
    泛型的用法是在容器后面添加<Type>
    Type可以是类,抽象类,接口
    泛型表示这种容器,只能存放APHero,ADHero就放不进去了。

    package generic;

    import java.util.ArrayList;

    import charactor.APHero;

    public class TestGeneric {

        public static void main(String[] args) {

            ArrayList<APHero> heros = new ArrayList<APHero>();

             

            //只有APHero可以放进去     

            heros.add(new APHero());

             

            //ADHero甚至放不进去

            //heros.add(new ADHero());

             

            //获取的时候也不需要进行转型,因为取出来一定是APHero

            APHero apHero =  heros.get(0);

             

        }

    }

    示例 3 : 子类对象

    假设容器的泛型是Hero,那么Hero的子类APHero,ADHero都可以放进去 
    和Hero无关的类型Item还是放不进去

    package generic;

    import java.util.ArrayList;

    import property.Item;

    import charactor.ADHero;

    import charactor.APHero;

    import charactor.Hero;

    public class TestGeneric {

        public static void main(String[] args) {

            ArrayList<Hero> heros = new ArrayList<Hero>();

             

            //只有作为Hero的子类可以放进去      

            heros.add(new APHero());

            heros.add(new ADHero());

             

            //和Hero无关的类型Item还是放不进去

            //heros.add(new Item());

             

        }

    }

    示例 4 : 泛型的简写

    为了不使编译器出现警告,需要前后都使用泛型,像这样:

    ArrayList<Hero> heros = new ArrayList<Hero>();


    不过JDK7提供了一个可以略微减少代码量的泛型简写方式

    ArrayList<Hero> heros2 = new ArrayList<>();


    后面的泛型可以用<>来代替,聊胜于无吧

    package generic;

      

    import java.util.ArrayList;

    import charactor.Hero;

      

    public class TestGeneric {

      

        public static void main(String[] args) {

            ArrayList<Hero> heros = new ArrayList<Hero>();

            //后面可以只用<>

            ArrayList<Hero> heros2 = new ArrayList<>();

             

        }

    }


    更多内容,点击了解: https://how2j.cn/k/generic/generic-generic/373.html

  • 相关阅读:
    Python paramiko模块
    前端基础:JavaScript介绍
    前端基础:CSS属性操作
    前端基础:CSS样式选择器
    前端基础:HTML标签(下)
    20181120-10 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 7
    beta阶段贡献分配实施
    Beta发布—美工+文案
    20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 06
    20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 05
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615485.html
Copyright © 2011-2022 走看看