Java自学-集合框架 泛型Generic

ArrayList上使用泛型

步骤 1 : 泛型 Generichtml

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

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 : 泛型的简写学习

为了避免使编译器出现警告,须要先后都使用泛型,像这样:this

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

不过JDK7提供了一个能够略微减小代码量的泛型简写方式设计

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

后面的泛型能够用<>来代替code

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

练习支持泛型的ArrayListhtm

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

答案 :接口

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

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

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

相关文章
相关标签/搜索