泛型擦除
在严格的泛型代码里,带泛型声明的类总应该带着类型参数。但为了与老的 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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器