1、什么是泛型

Java泛型(generics)是JDK5中引入的一个新特性。

本质就是万能类型。我们定义引用类型的变量需要指定其是什么Class的,使用泛型就可以代替其Class的作用!泛型不支持基本类型。使用时可能会自动装箱!

2、泛型好处

下面是ArrayList的源码

public class ArrayList<E> extends AbstractList<E>

我们看到:创建ArrayList集合需要我们指定集合元素的类型。我们在集合添加元素的时候,就不能添加与此类型没有直接关系的元素了。所以泛型的好处是:提供了编译器的错误检测。

3、泛型类

public class FanXingClass<T> {

    // 成员变量,创建对象时,指定成员变量的类型
    private T t;

    // 代参构造方法
    public FanXingClass(T t) {
        this.t = t;
    }
}

使用泛型类

        String s = "Hello!";
        FanXingClass fanXingClass = new FanXingClass(s);
        
        // JDK8之后就支持:new后的<>可不填写类名
        FanXingClass<String> fanXingClass1 = new FanXingClass<>(s);

泛型使用无参构造的时候,泛型认定为Object!

子类是泛型类的话,子类和父类的泛型类型要一致

4、泛型接口

/**
 * 泛型接口
 * @param <T>
 */
public interface Generator<T> {
    T getKey();
}
/**
 * 泛型接口的实现类,是一个泛型类,
 * 那么要保证实现接口的泛型类泛型标识包含泛型接口的泛型标识
 * @param <T>
 * @param <E>
 */
public class Pair<T,E> implements Generator<T> {

    private T key;
    private E value;

    public Pair(T key, E value) {
        this.key = key;
        this.value = value;
    }

    @Override
    public T getKey() {
        return key;
    }

    public E getValue() {
        return value;
    }
}

泛型其实没什么直接用处,我就不一点点记录笔记了。只记录重点内容,与常见的泛型使用场景

泛型擦除

编译期的泛型T,在JVM的字节码转换为对应的类型,大部分没声明的都会被被转换为Object!

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤