泛型的使用1

  1. 泛型只在编译期间有效,并且在编译期间会验证传入的值是否为泛型类型的值,如果不是对应泛型的值,将会报错:在这里插入图片描述
    在这里插入图片描述

    此时的构造函数的值应该是泛型的类型的值,也就是String类型的值,否则会报错。

2.如下图说明了,泛型在编译成class文件会被擦除,也就是运行的是同一个Class文件,此处和JVM的类加载相关。不赘述在这里插入图片描述

3.如果没有传入对应的泛型,则是Object类型,因为Object能兼容所有类型,所以可以传入任何参数,如下图
在这里插入图片描述

4.当接口有泛型时
在这里插入图片描述

  如果其子类没有泛型,实现的接口也不能用泛型,此时默认是Object类型
  
  ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200427221843467.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pjamx1c2U=,size_16,color_FFFFFF,t_70)

还有一种情况是子类有泛型,而父类没有泛型,此时实现的接口还是Object类型在这里插入图片描述
一种情况是,子类有指定泛型,父类也有指定泛型
在这里插入图片描述
那么对应的方法就是T类型,实现父类的方法。
还有一种情况:
直接在实现父类的方法指定其泛型,如果实现方法有用到父类的泛型,那么就使用指定的泛型
在这里插入图片描述

总结第4点:当父类没有泛型的时候,默认继承IGeneric类,父类的泛型默认变成Object,所以不管子类是否有泛型,实现的方法如果带有父类的泛型都是Object

猜你喜欢

转载自blog.csdn.net/zcjluse/article/details/105800568