java之泛型擦除

格物致知_Tony      2022-05-12     760

关键词:

泛型擦除

  在严格的泛型代码里,带泛型声明的类总应该带着类型参数。但为了与老的 Java 代码保持一致,也允许在使用带泛型声明的类时不指定类型参数。如果没有为这个泛型类指定泛型参数,则该类型参数被称作一个原始类型(raw Type)。

  如果在使用泛型类或泛型接口的时候,没有指定泛型实参,会怎么样?(泛型擦除现象,泛型擦除后,泛型形参被解析为什么类型呢?)

  (1)如果没有指定泛型形参的上限,就按照 Object 处理;

  (2)如果指定泛型形参的上限,就按照上限处理,如果有多个上限,多个上限用&连接,按照最左边的第一个上限处理。

  Demo:

 1 public class TestErase {
 2     public static void main(String[] args) {
 3         //ArrayList<String>被转换为了ArrayList
 4         ArrayList list = new ArrayList<String>();
 5         list.add("Hello");
 6         list.add("World");
 7         //泛型被擦除,按照默认上限Object处理
 8         Object object = list.get(1);
 9         
10         Student s = new Student("张三",12);
11         
12         //泛型被擦除,按照第一个上限Number处理
13         Number score = s.getScore();
14     }
15 }
16 class Student<T extends Number & java.io.Serializable>{
17     private String name;
18     private T score;
19     public Student(String name, T score) {
20         super();
21         this.name = name;
22         this.score = score;
23     }
24     public T getScore() {
25         return score;
26     }
27 }

java-反射-暴力反射和泛型擦除

JAVA-反射-暴力反射和泛型擦除暴力反射定义在类中的某些成员变量或成员方法是私有的,这显然不希望我们显式使用,但是Java还是为我们提供了一个方法用来"暴力"的使用这些私有属性或方法。Java中提供getDeclaredField()、g... 查看详情

泛型(10)-泛型擦除与转换

在严格的泛型代码中,带有泛型声明的类总应该带着泛型参数,但为了与老的Java代码保持一致,也允许在使用带泛型声明的类时不指定实际的类型,如果没有这个泛型指定实际类型,此时被称作raqtype(原始类型),默认时声明该泛型形参... 查看详情

java遗珠之泛型类型擦除(代码片段)

擦除规则泛型的作用之前已经介绍过了只是用于编译之前更为严格的类型检查,其他的一些特性也都是编译之前的,在编译之后泛型是会被擦除掉的。类型擦除所做的事情如下:如果是无界限的则会把类型参数替换成... 查看详情

java语法糖之泛型与类型擦除(代码片段)

1泛型与类型擦除泛型,JDK1.5新特性,本质是参数化类型(ParametersizedType)的应用,即所操作的数据类型被指定为一个参数。这种参数类型可用在:类接口方法的创建中,分别称为:泛型类泛型接口泛型方法在Java还... 查看详情

java泛型擦除——以super关键字指定类型下限的在泛型擦除时会被擦成啥样的呢?

个人认为是Object类型?对吗?参考技术AclassDemo1publicstaticvoidmain(String[]args) List<?superAnimal>c1=newArrayList<Animal>(); c1.add(newAnimal()); //get返回Object c1.get(0); List<?superString>c2=newArrayList<String>(); c2.add("A"); //get返回Objec... 查看详情

深入理解java泛型擦除机制(代码片段)

深入理解Java泛型擦除机制我们都知道Java中的泛型可以在编译期对类型检查,避免类型强制转化带来的问题,保证代码的健壮性。不同语言对泛型的支持也不一样,Java中的泛型类型在编译期会擦除,下面一个例子... 查看详情

27.android架构-泛型擦除机制

参考技术AJava的泛型是JDK5新引入的特性,为了向下兼容,虚拟机其实是不支持泛型,所以Java实现的是一种伪泛型机制,也就是说Java在编译期擦除了所有的泛型信息,这样Java就不需要产生新的类型到字节码,所有的泛型类型最终... 查看详情

java泛型泛型用法(泛型编译期擦除|上界通配符<?extendst>|下界通配符<?supert>)(代码片段)

文章目录一、泛型擦除二、泛型的上界通配符<?extendsT>三、泛型的下界通配符<?superT>一、泛型擦除泛型只保留到编译期,在编译完毕后,泛型就不存在了;在运行时,通过反射,调用泛型类,即使违反了泛型规则,也能进行相关操... 查看详情

继承关系在编译期做了什么?桥接方法泛型擦除(代码片段)

什么是桥接方法?Java桥接方法(BridgeMethod)是一种为了实现某些Java语言特性而由编译器自动生成的方法。可以通过Method类的isBridge方法来判断一个方法是否为桥接方法。在字节码文件中,桥接方法会被标记为ACC_BR... 查看详情

泛型擦除以及类型安全

带你深挖Java泛型类型擦除以及类型擦除带来的问题这篇文章写的很好,通俗易懂,转载记录一下。如有侵权,请联系我删除。 查看详情

第三节:java数据结构预备知识之泛型

上一节内容讲时间和空间复杂度:(王道408考研数据结构)第一章绪论-第二节2:算法的时间复杂度和空间复杂度注意:泛型是Java语法中比较难掌握的部分,所以了解即可文章目录一:什么是泛型二:泛型语法(1)定义·(2)使用... 查看详情

java遗珠之泛型不可靠类型(代码片段)

不可靠类型可靠类型是在运行时包含所有完整信息的类型,包括原始类型,非泛型类型,原生类型和无边界通配符的调用。不可靠类型是编译时类型擦除移除了一些信息,比如不是无边界通配符的其他情况。一个... 查看详情

java遗珠之泛型不可靠类型(代码片段)

不可靠类型可靠类型是在运行时包含所有完整信息的类型,包括原始类型,非泛型类型,原生类型和无边界通配符的调用。不可靠类型是编译时类型擦除移除了一些信息,比如不是无边界通配符的其他情况。一个... 查看详情

java之泛型

1、为什么要有泛型Generic?2、总结Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不... 查看详情

kotlin泛型的型变之路

...了些研究,算是对这篇文章的补充了。kotlin修炼指南7之泛型泛型,是为了让「类」、「接口」、「方法」具有更加通用的使用范围而诞生的,举个例子,假如我们不使用泛型,那么一个List中可以装得下任何对... 查看详情

java进阶之泛型

泛型的优点泛型类型可以提高可靠性和可读性泛型可以参数化类型泛型可以让我们在编译时而不是在运行时检测出错误泛型类或方法允许用户指定可以和这些类或方法一起工作的对象类型(相容的对象)泛型类ArrayList、泛型接口... 查看详情

java基础之泛型

泛型类容器类应该算得上最具重用性的类库之一。 publicclassContainer{ privateStringkey; privateStringvalue; publicContainer(Stringk,Stringv){ key=k; value=v; } publicStringgetKey(){&nbs 查看详情

java之泛型

泛型的理解:泛型示例:泛型语法:泛型注意事项自定义泛型例如:自定义泛型接口泛型方法普通类中定义泛型方法:没有<T,R…>不是泛型方法,而是方法使用了泛型习题:泛型的继承和通配符ÿ... 查看详情