泛型(二)之泛型基础

2020-05-04  本文已影响0人  极客天空

从上一篇泛型(一)之为何引入泛型
可以知道了没有泛型的世界是多么的悲催,引入泛型带来的便利,下面就详细正式的介绍一下泛型

一 什么是泛型

Java泛型(generics)是JDK5中引入的一种参数化类型特性

二 为什么使用泛型,使用泛型的好处

  1. 代码更健壮(只要编译期没有警告,那么运行期就不会出现ClassCastException)
  2. 代码更简洁(不用强转)
  3. 代码更灵活,复用性更强
    举个栗子 List 中的sort
 default void sort(Comparator<? super E> var1) {
        Object[] var2 = this.toArray();
        Arrays.sort(var2, var1);//只要实现了Comparator这个接口 都可以使用这个 sort方法
        ListIterator var3 = this.listIterator();
        Object[] var4 = var2;
        int var5 = var2.length;

        for(int var6 = 0; var6 < var5; ++var6) {
            Object var7 = var4[var6];
            var3.next();
            var3.set(var7);
        }

    }

三 泛型的分类

  1. 泛型接口
public interface Plate<T> {
    public void set(T t);
    public T get();
}
  1. 泛型类
public class AIPlate<T> implements Plate<T> {
    List<T> items = new ArrayList<T>();

    public AIPlate() {
    }

    public AIPlate(T t) {
        items.add(t);
    }


    @Override
    public void set(T t) {
        items.add(t);
    }

    @Override
    public T get() {
        int index = items.size() -1;
        if(index>= 0){
            return items.get(index);
        }else{
            return null;
        }
    }

    @Override
    public String toString() {
        return "AIPlate{" +
                "items=" + items +
                '}';
    }
}
  1. 泛型方法
   public <T> AIPlate<T> getAIPlate(){
        return new AIPlate<T>();
    }

四 参数化类型

就是将类型当参数一样传递
参数类型只是引用类型(泛型副作用)
例如:
Plate<T>中的”T”称为类型参数
Plate<Banana>中的”Banana”称为实际类型参数
“Plate<T>” 整个成为泛型类型
“Plate<Banana>”整个称为参数化的类型

上一篇 下一篇

猜你喜欢

热点阅读