• Java自学-集合框架 泛型Generic


    ArrayList上使用泛型

    步骤 1 : 泛型 Generic

    不指定泛型的容器,可以存放任何类型的元素
    指定了泛型的容器,只能存放指定类型的元素以及其子类

    package property;
     
    public class Item {
        String name;
        int price;
         
        public Item(){
             
        }
         
        //提供一个初始化name的构造方法
        public Item(String name){
            this.name = name;
        }
         
        public void effect(){
            System.out.println("物品使用后,可以有效果");
        }
         
    }
    package collection;
       
    import java.util.ArrayList;
    import java.util.List;
      
    import property.Item;
    import charactor.APHero;
    import charactor.Hero;
       
    public class TestCollection {
      
        public static void main(String[] args) {
              
            //对于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
            List heros = new ArrayList();
              
            heros.add(new Hero("盖伦"));
              
            //本来用于存放英雄的容器,现在也可以存放物品了
            heros.add(new Item("冰杖"));
              
            //对象转型会出现问题
            Hero h1=  (Hero) heros.get(0);
            //尤其是在容器里放的对象太多的时候,就记不清楚哪个位置放的是哪种类型的对象了
            Hero h2=  (Hero) heros.get(1);
              
            //引入泛型Generic
            //声明容器的时候,就指定了这种容器,只能放Hero,放其他的就会出错
            List<Hero> genericheros = new ArrayList<Hero>();
            genericheros.add(new Hero("盖伦"));
            //如果不是Hero类型,根本就放不进去
            //genericheros.add(new Item("冰杖"));
              
            //除此之外,还能存放Hero的子类
            genericheros.add(new APHero());
             
            //并且在取出数据的时候,不需要再进行转型了,因为里面肯定是放的Hero或者其子类
            Hero h = genericheros.get(0);
             
        }
           
    }
    

    步骤 2 : 泛型的简写

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

    List<Hero> genericheros = new ArrayList<Hero>();
    

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

    List<Hero> genericheros2 = new ArrayList<>();
    

    后面的泛型可以用<>来代替

    package collection;
       
    import java.util.ArrayList;
    import java.util.List;
     
    import charactor.Hero;
       
    public class TestCollection {
      
        public static void main(String[] args) {
            List<Hero> genericheros = new ArrayList<Hero>();
            List<Hero> genericheros2 = new ArrayList<>();
          
        }
           
    }
    

    练习支持泛型的ArrayList

    借助泛型和前面学习的面向对象的知识,设计一个ArrayList,使得这个ArrayList里,又可以放Hero,又可以放Item,但是除了这两种对象,其他的对象都不能放

    答案 :

    首先创建一个接口 LOL,不需要在其中声明任何方法
    接着让Hero和Item都实现LOL接口
    最后,声明一个ArrayList的变量lolList,它的泛型是

    List<LOL> lolList = new ArrayList<>();
    

    这样在lolList中就即放Hero对象,又放Item对象了。

  • 相关阅读:
    python标准库
    python常用标准库
    django-restframework-serializers
    Resources.UnloadUnusedAssets
    Shader 的 Blend
    C++STL queue
    C++STL stack
    C++STL deque
    C++STL容器重点
    C++STL 迭代器
  • 原文地址:https://www.cnblogs.com/jeddzd/p/11818525.html
Copyright © 2020-2023  润新知