文章目录

  • 前言
  • 一、泛型类
  • 二、泛型接口
  • 三、泛型方法



前言

Java泛型是JDK5中引入的一个新特性。泛型解决了编译时类型安全检测机制,使代码具有更好的安全性和可读性。泛型在集合类中广泛使用,如:ArrayList。

泛型的本质是参数化类型。泛型有三种常用的使用方式:泛型类,泛型接口和泛型方法


一、泛型类

/**
 * Java库中 E表示集合的元素类型,K 和 V分别表示表的关键字与值的类型,
 * T(需要时还可以用临近的字母 U 和 S)表示“任意类型”
 * 
 * @author Mr.Guo
 * @date 2021/2/3 下午1:54
 */
public class BaseBean<T, U, S> {
    private T prop1;
    private U prop2;
    private S prop3;

    public BaseBean(T t, U u, S s) {
        this.prop1 = t;
        this.prop2 = u;
        this.prop3 = s;
    }

    public T getProp1() {
        return this.prop1;
    }

    public U getProp2() {
        return this.prop2;
    }

    public S getProp3() {
        return this.prop3;
    }

    public static void main(String[] args) {
        BaseBean<String, Integer, Date> bean = new BaseBean<>("string", 1, new Date());

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        System.out.println("prop1=>" + bean.getProp1());
        System.out.println("prop2=>" + bean.getProp2());
        System.out.println("prop3=>" + dateFormat.format(bean.getProp3()));
    }
}

运行结果:

prop1=>string prop2=>1 prop3=>2021-02-03 14:50:27

二、泛型接口

定义一个接口

/**
 * @author Mr.Guo
 * @date 2021/2/3 下午3:00
 */
public interface BaseInterface<T, U> {
    T getProp1();
    U getProp2();
}

第一种实现方式

/**
 * @author Mr.Guo
 * @date 2021/2/3 下午3:02
 */
public class Bean1 implements BaseInterface<String, Integer> {
    @Override
    public String getProp1() {
        return "String";
    }

    @Override
    public Integer getProp2() {
        return 1;
    }
}

第二种实现方式

/**
 * @author Mr.Guo
 * @date 2021/2/3 下午3:03
 */
public class Bean2<T, U> implements BaseInterface<T, U> {
    T prop1;
    U prop2;

    @Override
    public T getProp1() {
        return prop1;
    }

    @Override
    public U getProp2() {
        return prop2;
    }
}

三、泛型方法

/**
 * @author Mr.Guo
 * @date 2021/2/3 下午3:08
 */
public class Bean {
    public <T> T parse(String s) {
        return null;
    }

    public <T> T getMiddle(T... arr) {
        return arr[arr.length / 2];
    }
}