泛型

作者: 夜沐下的星雨 | 来源:发表于2020-06-02 08:54 被阅读0次

    什么是泛型:
    泛型:就是一种不确定的数据类型。
    比如:ArrayList<E> E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。
    泛型可以省略,如果省略,默认泛型是Object类型。
    泛型的好处:

    1. 省略了强转的代码。
    2. 可以把运行时的问题提前到编译时期。

    有界泛型:<V extend String >
    这个泛型只能是String 类型的。

    泛型的理解:
    简介
    编写的代码可以被不同的对象类型所重用。

    泛型的本质是参数化类型。所操作的数据类型被指定为一个参数。
    比如:集合类 linkedlist

    出现:有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。

    泛型好处:
    类型安全:提高java程序的类型安全,编译时期就可以检查出类型不正确导致的类型转换异常,消除强制类型转换。

    分类
    泛型有三种形式:泛型类、泛型方法、泛型接口

    泛型类:未知类型应用于整个类的时候,可以使用泛型类。

    class DataHolder<T>{
    T item;
    public void setData(T t) {
    this.item=t;
    }
    public T getData() {
    return this.item;
    }
    }
    泛型方法:当未知类型值应用于方法的时候,可以使用泛型方法,类型的定义要放到返回类型或者void的前面。
    /**

    • 泛型方法
    • @param e
      */
      public <E> void PrinterInfo(E e) {
      System.out.println(e);
      }
      泛型接口:类似于泛型类

    public interface Generator<T> {
    T next();
    }

    泛型的通配符:

    <?> 无限制通配符
    <? extends E> extends 关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类
    <? super E> super 关键字声明了类型的下界,表示参数化的类型可能是指定的类型,或者是此类型的父类
    

    泛型的类型擦除:
    当编译器对带有泛型的java代码进行编译时,它会去执行类型检查和类型推断,然后生成普通的不带泛型的字节码,这种普通的字节码可以被一般的 Java 虚拟机接收并执行,这在就叫做 类型擦除(type erasure)。

    擦除的实现原理:
    Java 编辑器会将泛型代码中的类型完全擦除,使其变成原始类型。
    当然,这时的代码类型和我们想要的还有距离,接着 Java 编译器会在这些代码中加入类型转换,将原始类型转换成想要的类型。这些操作都是编译器后台进行,可以保证类型安全。
    总之泛型就是一个语法糖,它运行时没有存储任何类型信息。

    相关文章

      网友评论

          本文标题:泛型

          本文链接:https://www.haomeiwen.com/subject/vnuyzhtx.html