你所不知道的泛型

一、为什么要有泛型

//没有泛型之前存在的问题
List list = new ArrayList();
//需求:存入学生成绩
list.add(34);
list.add(23);
//问题一:类型不安全,可以存入其他类型的数据
list.add("Tom");

for(Object score : list){
    
    
    //问题二:类型转换异常
    int num = (int)score;
}

二、在集合中使用泛型

  1. 集合接口或者集合类在JDK5之后都修改为了带泛型的结构
  2. 在实例化集合类是,可以指定具体的泛型类型
  3. 泛型的类型必须类,不能是基本数据类型
  4. 如果实例化是没有指定具体的泛型,默认为Object
    @Test
    public void test2(){
    
    
        ArrayList<Integer> list = new ArrayList<>();
        list.add(34);
        list.add(34);
        list.add(34);
        //解决问题一:避免编译时添加不同类型的数据
        //list.add("Tom");
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
    
    
            //避免问题二:类型转换异常
            int scaore = iterator.next();
            System.out.println(scaore);
        }
    }

三、自定义泛型结构

1、自定义泛型类

public Person<T>{
    
    
    T name;
    
    public Person(T name){
    
    
        this.name = name;
    }
    
    public void setName(T name){
    
    
        this.name = name;
    }
    public T getName(){
    
    
        return name;
    }
}

//如果定义了泛型类,在实例化对象时没有使用,则默认是Object
Person p = new Person();

//建议在实例化对象时,指定泛型的类型
Person<String> p1 = new Person<>();

四、泛型在继承上的体现

虽然类A是类B的父类,但是 G<A> 和 G<B> 不具备子父类关系,二者是并列关系
    
List<String> list1 = new ArrayList<>();
List<Object> list2 = new ArrayList<>();

//编译不通过
list1 = list2;

猜你喜欢

转载自blog.csdn.net/weixin_45321793/article/details/110139682