Java基础第二遍-泛型

什么是泛型

  1. Java泛型(generics)是JDK5中引入的新特性,泛型提供了编译时类型安全检测机制,该机制允许我们在编译时检测到非法的类型数据结构。
  2. 泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数
  3. 通俗来讲:就是为了约束数据结构的类型
    ArrayList<String> list = new ArrayList<>();

泛型类、接口

//自定义泛型类
package com.bixiangdong.generic;

// 这里的T就是一个形式参数,在使用类的时候指定的 类似于:ArrayList<String> list = new ArrayList<>();
//泛型类的使用:类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>(); 
//JDK 1.7 后面的具具体的数据类型可以不写 泛型类的使用:类名<具体的数据类型> 对象名 = new 类名<>(); 
public class Generic<T> {
    private T key;
    public Generic(T key){
        this.key=key;
    }
    public T getKey(){
        return this.key;
    }

    public void setKey(T key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "Generic{" +
                "key=" + key +
                '}';
    }
}

  1. 泛型类在使用的时候如果没有指定具体的类型,将默认指定为Object类型来操作
  2. 泛型类不支持具体的数据类型:int、float等,支持类,Integer等
package com.bixiangdong.generic;

import java.util.ArrayList;
import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {
        //抽奖品
        ProductGetter<String> objectProductGetter = new ProductGetter<>();
        objectProductGetter.addProduct("哇哈哈");
        objectProductGetter.addProduct("勇闯天涯");
        objectProductGetter.addProduct("百事可乐");
        objectProductGetter.addProduct("可口可乐");
        objectProductGetter.addProduct("雪碧");
        System.out.println(objectProductGetter.getProduct());
        //抽奖金
        ProductGetter<Integer> objectProductGetter2 = new ProductGetter<>();
        objectProductGetter2.addProduct(1230);
        objectProductGetter2.addProduct(4564);
        objectProductGetter2.addProduct(156561);
        objectProductGetter2.addProduct(4546);
        objectProductGetter2.addProduct(48452);
        System.out.println(objectProductGetter2.getProduct());
    }
}
class ProductGetter<T>{
    Random random = new Random();

    //奖品
    private T product;

    //奖品池
    ArrayList<T> list = new ArrayList<>();

    //添加奖品
    public void addProduct(T t){
        list.add(t);
    }
    //获取奖品
    public T getProduct(){
        return list.get(random.nextInt(list.size()));
    }
}

泛型类派生子类

  1. 子类继承父类,父类如果是一个泛型类,子类也是一个泛型类,那么父类的泛型标识需要于子类一致,这是为了在使用子类的时候,指定的泛型可以传递给父类
    image

泛型方法

泛型方法

类型通配符

类型擦除

泛型和数组

泛型和反射

posted @ 2021-11-09 23:05  争取做百分之一  阅读(25)  评论(0)    收藏  举报