Java泛型类型擦除以及类型擦除带来的问题--什么是泛型擦除后保留的原始类型

简介: 泛型擦除后生成原始类型,类型参数被替换为其限定类型(如无则用Object)。例如`Pair<T>`变为`Pair`,成员变为`Object`;若`T extends Comparable`,则替换为`Comparable`,确保类型安全与兼容性。

原始类型 就是擦除去了泛型信息,最后在字节码中的类型变量的真正类型,无论何时定义一个泛型,相应的原始类型都会被自动提供,类型变量擦除,并使用其限定类型(无限定的变量用Object)替换。举例说明
class Pair {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}

其对应的原始类型就是
class Pair {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}

但如果该类的定义有限定,比如继承了,那么就会产生变化:
public class Pair {}
此时原始类型就是Comparable,而不再是Object

相关文章
|
8月前
|
Java 测试技术 Apache
安装Jmeter
JMeter依赖JDK,需先安装并配置JDK环境变量。前往Apache JMeter官网(http://jmeter.apache.org/download_jmeter.cgi)下载最新版本,解压后即可使用,适用于性能测试与负载模拟。
|
8月前
|
Java
common-lang3
避免三目运算符引发Java自动拆装箱异常,当类型不一致时可能导致NPE。建议统一操作数类型或显式转换,确保基本类型与包装类混用时的安全性,提升代码稳定性与可读性。
common-lang3
Jmeter快速入门
Jmeter快速入门
服务暴露总结
本文深入解析服务暴露的核心原理,涵盖本地与远程暴露机制,阐明“Service→Invoker→Exporter”的核心链路,辅以图示,为后续内容奠定基础。
|
8月前
|
NoSQL Redis
Redis集群伸缩,转移插槽失败
当Redis集群出现slot迁移异常时,可通过日志定位处于importing状态的slot ID。登录对应实例后,执行`cluster setslot &lt;ID&gt; stable`命令恢复稳定状态,解决迁移卡住问题。注意根据实际日志中的slot ID调整参数。
工程搭建
从0到1搭建工程
|
8月前
|
关系型数据库 MySQL
|
8月前
|
数据库
数据库设计三范式
本文介绍数据库三范式:第一范式要求字段原子性,不可再分;第二范式要求消除部分依赖,表应描述单一主题;第三范式要求消除传递依赖。范式旨在减少冗余、提升数据一致性,但实际设计中需结合业务需求灵活应用,不必严格遵循。
@Target注解
@Target注解用于指定自定义注解的作用目标,如类、接口、字段、方法、参数、构造函数、局部变量、注解类型及包,确保注解只能在指定程序元素上使用,提升代码规范性与可读性。
|
8月前
|
Java
@SpringBootConfiguration注解
@SpringBootConfiguration是@Configuration的封装,标注主启动类,使其所在包成为组件扫描的根路径。因此主类需置于外层包,确保所有组件被扫描到,实现自动配置与组件注入。

热门文章

最新文章