首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

擦除)【java基础—-

不能存储基本类型int,double… 5.擦除 5.1 擦除概念: 5.2 由于擦除出现的错误举例: ---- ---- 1.什么是 1.1概念: Java是J2 SE1.5...(3)不同之间不能相互赋值,举例 对于特点(3)不存在多态,举例 另外这里报错原因是:Type mismatch: cannot convert from ArrayList<Integer...4.4不能是基本类型(本质是一种引用类型),还有考虑到擦除后的类型,例如为Object类型时,Object不能存储基本类型int,double… 5.擦除 5.1 擦除概念: 类型擦除指的是通过类型参数合并...5.2 由于擦除出现的错误举例: 报错原因:Erasure of method MyGeneric(ArrayList) is the same as another method...Erasure of method MyGeneric(ArrayList) is the same as another method in type MyGeneric 类型擦除原因

2.4K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java擦除

    和类型擦除 foreach语法 1. 和类型擦除 的本质是参数化类型,这个参数类型可被用在接口、类、方法上,分别称为接口、类、方法。...1.1 为什么要引入 没有Java只能通过Object强制转换成具体的类型,这种写法极其不美观,而且需要程序员去保证这个强转操作的正确性,否则极有可能在虚拟机运行的时候抛出ClassCastException...1.2 类型擦除 Java中的是伪只会在程序源码中存在,在编译后的class文件中,参数类型将会被抹除(类型擦除)。...Java编译器会自动将擦除,将强转添加。...由于Java的引入,各种场景下的方法调用都可能产生影响,如在类中如何获取参数化类型。

    76020

    Java类型擦除问题

    Java类型擦除问题 以前就了解过Java的实现是不完整的,最近在做一些代码重构的时候遇到一些Java类型擦除的问题,简单的来说,Java中所指定的类型在编译时会将其去除,因此List<...因此java只能做到编译期检查的功能,运行期间就不能保证类型安全。...,并提供了方法将string spec 反序列化成相应的类型,比较理想的方式是在反序列化的方法中能够获取到参数类型 T 的实际类型,理论上运行时Spec类型是确定了,因此T也应该是确定的,但是因为类型擦除...按照以下尝试 通过((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()获取类型,经过测试是获取不到的...第二种是创建spec的子类中使用这个方法就可以获取的类型 @Data public abstract static class AbstractSpec { public String

    1.1K20

    JAVA与类型擦除

    是在JAVA 1.5版本中才引入的,它能和以前的版本兼容的原因信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,即类型擦除。...的定义与使用 根据使用情况可以分为以下三种: 方法 接口 下面是一个常用的类: // 一个类,可以根据需要包装不同结果的返回值 public class Result...通配符 如果在某些场景下我们不关注(或者不那么关注)对象的类型参数,可以使用通配符。...class java.lang.Object */ 通过反射我们在运行时得到了data的类型,发现都是Object,证明代码编译后所谓都没了,这就是擦除。...class java.lang.Number */ 通过反射绕过限制 从上面例子可以感受到,所谓,不过是编译过程及其之前才有的概念,主要还是为了方便开发。

    1.8K40

    Java 擦除,转换,桥方法)

    类型擦除 编译器在编译期间所以的信息都会被擦除 编译 .java 生成的 .class (字节码文件)中数据类型必须是确定好的。...如果一个 class 是类,或者含有方法,那么编译器在编译时会将其中的类型变量去掉,生成一个与类同名的原始类。在 原始类class文件 中的是其真正的类型(原始类型)。...原始类型:类型限界(无类型限界为Object) 定义类Generic1和Generic2 class Generic1 { T value; public T getValue...return value; } public void setValue(A value) { this.value = value; } } 总结: 如果类型的类型变量没有限定...作为原始类型; 如果有限定(),用A作为原始类型; 如果有多个限定(),用第一个边界的类型变量A1类作为原始类型; 类型转换 当一个具有擦除返回类型的方法被调用时会进行强制类型转换

    1K10

    浅谈擦除

    擦除   在编码阶段使用时加上的类型参数,会被编译器在编译阶段去掉,这个过程叫做擦除。   主要用于编译阶段。在编译后生成的Java字节码文件中不包含中的类型信息。...JVM读取的只是List,由附加的类型信息对JVM来说是不可见的。 Java核心技术卷I解释:   无论何时定义一个类型,都会自动提供一个相应的原始类型(raw type)。...(2)转换方法   类型擦除也会出现在方法中。...擦除带来的问题   当然,擦除也带来了许多问题,这里就不细讲了,只是小总结下: 不能用基本类型实例化类型参数 运行时类型查询只适用于原始类型 不能创建参数化类型的数组 不能实例化类型变量 不能构造数组...类的静态上下文中类型变量无效 不能抛出或捕获类的实例 可以取消对检查异常的检查 注意擦除后的冲突 参考: 《剑指Java》 《Java核心技术卷I》 详解 之类型擦除

    18750

    揭开Java 类型擦除神秘面纱

    public T test1(T t){ return value1; } 类型擦除 Java 1.5 版本才引进的概念,在这之前是没有的概念的,但显然,代码能够很好地和之前版本的代码很好地兼容...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...类型擦除带来的局限性 类型擦除,是能够与之前的 java 版本代码兼容共存的原因。但也因为类型擦除,它会抹掉很多继承相关的特性,这是它带来的局限性。...原因还是类型擦除带来的影响。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因

    96840

    Java,你了解类型擦除吗?

    public T test1(T t){ return value1; } 类型擦除 Java 1.5 版本才引进的概念,在这之前是没有的概念的,但显然,代码能够很好地和之前版本的代码很好地兼容...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...类型擦除带来的局限性 类型擦除,是能够与之前的 java 版本代码兼容共存的原因。但也因为类型擦除,它会抹掉很多继承相关的特性,这是它带来的局限性。...原因还是类型擦除带来的影响。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因

    2.3K20

    Java之类型擦除类型擦除参考资料

    本文首发于个人网站:Java阿杜 类型擦除 学过C++模板的,在使用Java的时候,会感觉到有点不疑问,例如:(1)无法定义一个数组、无法调用参数对象中对应的方法(当然,通过extends...Java中的有这些问题,是它的实现机制决定的,即“类型擦除”。...类型擦除的定义:编译通过后,准备进入JVM运行时,就不再有类型参数的概念,换句话说:每定义一个类型,JVM会自动提供一个对应的原生类; public class Holder4 {...在Java诞生10年后,才想实现类似于C++模板的概念,即Java的类库是Java生态中非常宝贵的财富,必须保证向后兼容(即现有的代码和类文件依旧合法)和迁移兼容(化的代码和非化的代码可互相调用...Java依赖编译器实现,只存在于编译期,JVM中没有的概念;那么,编译器做了什么工作呢?

    61720

    揭开Java 类型擦除神秘面纱

    public T test1(T t){ return value1; } 类型擦除 Java 1.5 版本才引进的概念,在这之前是没有的概念的,但显然,代码能够很好地和之前版本的代码很好地兼容...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...类型擦除带来的局限性 类型擦除,是能够与之前的 java 版本代码兼容共存的原因。但也因为类型擦除,它会抹掉很多继承相关的特性,这是它带来的局限性。...原因还是类型擦除带来的影响。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因

    1.3K30

    揭开Java 类型擦除神秘面纱

    public T test1(T t){ return value1; } 类型擦除 Java 1.5 版本才引进的概念,在这之前是没有的概念的,但显然,代码能够很好地和之前版本的代码很好地兼容...这是因为,信息只存在于代码编译阶段,在进入 JVM 之前,与相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,类和普通类在 java 虚拟机内是没有什么特别的地方。...类型擦除带来的局限性 类型擦除,是能够与之前的 java 版本代码兼容共存的原因。但也因为类型擦除,它会抹掉很多继承相关的特性,这是它带来的局限性。...原因还是类型擦除带来的影响。...,并不神奇 我们可以看到,其实并没有什么神奇的地方,代码能做的非代码也能做。 而类型擦除,是能够与之前的 java 版本代码兼容共存的原因

    1.1K10

    Java基础篇:与类型擦除

    三、Java类库中的有那些?的用途? (1)类:最常见的用途就是容器类,通过可以完成对一组类的操作对外开放相同的接口。...五、Java的实现方法–类型擦除Java的实现是靠类型擦除技术实现的,类型擦除是在编译期完成的,也就是在编译期,编译器会将的类型参数都擦除成它指定的原始限定类型,如果没有指定的原始限定类型则擦除为...object类型,之后在获取的时候再强制类型转换为对应的类型,因此生成的Java字节码中是不包含中的类型信息的,即运行期间并没有的任何信息。...说明类型String和Integer都被擦除掉了,只剩下了原始类型。...原因:编译器检查对象调用方法时只看变量,然而程序在运行期间调用方法时就要考虑对象具体类型了。

    98921

    Java探究及擦除机制和如何跳过编译阶段

    在工作闲暇之余,开始了对Java本身的探究,首先研究的便是日常使用的 的原理: Java是jdk5引入的一种机制。...为了向下兼容,所以Java虚拟机是不支持的,也就是说Java是一种伪机制。...Java 擦除Java 中的一个重要特性,其目的是避免过多的创建类而造成的运行时的过度消耗。所以,想 ArrayList 和 ArrayList 这两个实例,其类实例是同一个。...使用后,不能使用基本数据类型(byte,short,int ,long,float,double,boolean,char); 至于原因嘛,上面也讲了,擦除后变成Object,而Object无法存放...int类型 不能使用 instanceof运算符 原因:因为擦除后只剩下原始类型,信息不存在。

    53330

    Java 】使用上下边界通配符解决擦除问题

    文章目录 前言 一、使用上边界通配符示例 二、分析字节码的附加信息 前言 上一篇博客 【Java 用法 ( 编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <?...super T> ) 一、擦除 章节中 , 讲到了擦除问题 , 只保留到了编译阶段 , 运行时就没有的限制了 ; 本篇博客中介绍一种方法 , 使用上下边界通配符解决擦除问题 ; 一、...\Main\out\production\Main>javap -p DataImpl.class Compiled from "DataImpl.java" public class DataImpl...get(); public void set(java.lang.Object); } 下面的 个方法 , 明显不符合 Java 语法规范 , 方法名和参数一样 ; public T get...Constant pool: #4 = Methodref #5.#35 // DataImpl.set:(LPerson;)V 通过 上下边界 通配符 解决 擦除问题

    84110

    Java语法糖之与类型擦除

    这种参数类型可用在: 类 接口 方法 的创建中, 分别称为: 接口 方法 在Java还没有的版本时。...因此,对运行期的Java来说Araylist、Aralist是同一个类。所以Java语言的一颗语法糖Java称为类型擦除,基于这种方法实现的称为伪。...擦除前的例子 把这段Java代码编译成Class文件,然后再用字节码反编译后,將会发现都不见了,又变回了Java出现之前的写法,类型都变回了原类型。...如: 通过擦除实现,丧失了一些思想应有的优雅 当遇见重载1 不能被编译的,因为参数List和List编译之后都被擦除了。...只能说,擦除成相同的原生类型只是无法重载的部分原因遇见置载2 由于Java的引入,各种场景(虚拟机解析、反射等)下的方法调用都可能对原有基础产生影响,如在类中如何获取传入的参数化类型等

    57530

    java反射技术的案例之擦除

    擦除 正确理解概念的首要前提是理解类型擦除(type erasure)。 Java中的基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含中的类型信息的。...类型擦除也是Java实现方式与C++模板机制实现方式之间的重要区别。 很多的奇怪特性都与这个类型擦除的存在有关,包括: 类并没有自己独有的Class类对象。...的类型参数不能用在Java异常处理的catch语句中。因为异常处理是由JVM在运行时刻来进行的。...* 我来告诉大家,其实程序编译后产生的.class文件中是没有约束的,这种现象我们称为 * 擦除。...ArrayList(); array.add(10); array.add(20); array.add(30); array.add(40); // array.add("因为原因

    1.2K10

    Java语法糖之与类型擦除

    这种参数类型可用在: 类 接口 方法 的创建中, 分别称为: 接口 方法 在Java还没有的版本时。...因此,对运行期的Java来说Araylist、Aralist是同一个类。所以Java语言的一颗语法糖Java称为类型擦除,基于这种方法实现的称为伪。...擦除前的例子 [d347cb20042fbdffec7af32a5cef72b4.png] 把这段Java代码编译成Class文件,然后再用字节码反编译后,將会发现都不见了,又变回了Java出现之前的写法...变成了一样的原生类型List,擦除动作导致这两种方法的特征签名变得一模一样。初步看来,无法重载的原因已经找到了,但真的就如此吗?...只能说,擦除成相同的原生类型只是无法重载的部分原因遇见置载2 [7122295ac6c3431e2b732e6668008da6.png] 由于Java的引入,各种场景(虚拟机解析、反射等

    1.1K70

    【说站】Java擦除的原理分析

    Java擦除的原理分析 1、说明 在编译过程中,可以获得类型变量的信息。因此,set方法可以在编译器中进行类型检查,非法类型不能通过编译。...但是对于get方法,由于擦除机制,操作时的实际引用类型是Object类型。 为了恢复返回结果的类型,编译器在get后添加了类型转换。...因此,我们处理了对象的读写位置,并对代码添加了限制。...2、实例 //GenericHolder.java public class GenericHolder {     T obj;     public T getObj() {         .../lang/String       21: astore_2             22: return         } 以上就是Java擦除的原理分析,希望对大家有所帮助。

    30030
    领券