欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java自学-集合框架 泛型Generic

程序员文章站 2022-06-07 12:20:39
ArrayList上使用泛型 步骤 1 : 泛型 Generic 不指定泛型的容器,可以存放任何类型的元素 指定了泛型的容器,只能存放指定类型的元素以及其子类 package property; public class Item { String name; int price; public I ......

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对象了。