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

Java自学-泛型 集合中的泛型

程序员文章站 2022-05-29 07:55:40
什么是 泛型? 示例 1 : 不使用泛型 不使用泛型带来的问题 ADHero(物理攻击英雄) APHero(魔法攻击英雄)都是Hero的子类 ArrayList 默认接受Object类型的对象,所以所有对象都可以放进ArrayList中 所以get(0) 返回的类型是Object 接着,需要进行强制 ......

什么是 泛型?

示例 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可以是类,抽象类,接口
泛型表示这种容器,只能存放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<>();
         
    }
}