泛型类与类型安全详解
执行上述 Java 程序清单每个清单的核心概念、代码要点及运行结果如下Listing 1: 基本泛型类概念定义了一个泛型类GenT其中T是类型参数在实例化时被具体类型如Integer、String替换。要点使用泛型后从getob()方法获取值时无需进行强制类型转换编译器会确保类型安全。运行结果Type of T is java.lang.Integer value: 88 Type of T is java.lang.String value: Generics TestListing 2: 非泛型类对比概念NonGen类使用Object类型来存储数据以模拟泛型出现前的实现方式。要点从getob()获取值后必须进行显式的强制类型转换如(Integer)、(String)。代码末尾的iOb strOb;赋值是合法的因为都是NonGen类型但会导致后续的(Integer) iOb.getob()在运行时抛出ClassCastException这凸显了非泛型代码在类型安全上的缺陷。运行结果Type of ob is java.lang.Integer value: 88 Type of ob is java.lang.String value: Non-Generics Test Exception in thread main java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at NonGenDemo.main(NonGenDemo.java:48)Listing 3: 多类型参数的泛型类概念泛型类TwoGenT, V可以声明多个类型参数。运行结果Type of T is java.lang.Integer Type of V is java.lang.String value: 88 value: Generics Listing 4: 有缺陷的泛型类编译错误概念StatsT试图计算任意类型数组的平均值但在average()方法中调用nums[i].doubleValue()会导致编译错误因为编译器无法确保类型T一定有doubleValue()方法。要点此清单旨在展示无界泛型的局限性代码本身无法通过编译。Listing 5: 有界类型参数概念通过StatsT extends Number声明了一个有界类型参数将T限制为Number或其子类如Integer、Double。这样在average()方法中就可以安全调用Number类定义的doubleValue()方法。要点被注释掉的StatsString部分将无法编译因为String不是Number的子类这体现了编译时类型检查的优势。运行结果iob average is 3.0 dob average is 3.3 Listing 6: 通配符参数概念在sameAvg(Stats? ob)方法中使用了无界通配符?表示它可以接受任何泛型类型的Stats对象作为参数。这使得方法可以比较不同类型如Integer、Double、Float的Stats对象的平均值。运行结果iob average is 3.0 dob average is 3.3 fob average is 3.0 Averages of iob and dob differ. Averages of iob and fob are the same.Listing 7: 有界通配符概念演示了有界通配符在继承层次结构中的应用。CoordsT extends TwoD是一个泛型类。方法showXY(Coords? c)使用无界通配符可接受任何Coords对象。showXYZ(Coords? extends ThreeD c)和showAll(Coords? extends FourD c)使用上界通配符分别限制参数必须是CoordsThreeD或其子类和CoordsFourD或其子类。因此showXYZ(tdlocs)和showAll(tdlocs)的调用被注释掉因为tdlocs是CoordsTwoD类型不满足? extends ThreeD的约束。运行结果Contents of tdlocs. X Y Coordinates: 0 0 7 918 41 -23Contents of fdlocs. X Y Coordinates: 1 26 8 22 93 -2 X Y Z Coordinates: 1 2 36 8 14 22 9 43 -2 -23 X Y Z T Coordinates: 1 2 3 4 6 8 14 822 9 4 9 3 -2 -23 17 Listing 8: 泛型方法概念在普通类GenMethDemo中定义了一个泛型方法isIn()。方法签名T extends ComparableT, V extends T声明了类型参数T和V其中T必须实现ComparableT接口V必须是T或其子类。这使得方法可以检查一个对象是否在特定类型的数组中。要点被注释掉的isIn(two, nums)调用会导致编译错误因为类型不兼容String不是Integer的子类反之亦然这保证了类型安全。运行结果2 is in nums7 is not in nums two is in strs seven is not in strs Listing 9: 泛型构造函数概念在非泛型类GenCons中构造函数被声明为泛型T extends Number GenCons(T arg)。这意味着构造函数可以接受任何Number或其子类的参数。运行结果val: 100.0 val: 123.5Listing 10: 泛型接口概念定义了一个泛型接口MinMaxT extends ComparableT然后由泛型类MyClassT extends ComparableT实现它。这确保了存储在MyClass中的对象类型T本身是可比较的从而能在min()和max()方法中调用compareTo()。运行结果Max value in inums: 8 Min value in inums: 2 Max value in chs: w Min value in chs: bListing 11: 原始类型概念演示了使用原始类型Gen raw会绕过泛型类型检查可能导致运行时ClassCastException。原始类型是为了兼容遗留代码在新代码中应避免使用。要点示例中展示了多个由于使用原始类型而可能引发运行时错误的赋值和强制转换这些代码行被注释掉了。运行结果value: 98.6Listing 12 13: 泛型类的继承Listing 12泛型类Gen2T继承自GenT并传递了相同的类型参数T。Listing 13泛型子类Gen2T, V扩展了父类的类型参数增加了第二个类型参数V。运行结果 (Listing 13)Value is: 99 Listing 14: 非泛型类作为泛型类的父类概念泛型类GenT可以继承自一个非泛型类NonGen。运行结果Hello 47 Listing 15: 泛型与 instanceof概念演示了在泛型类继承层次中使用instanceof运算符。由于类型擦除不能在运行时检查泛型类型的具体参数如Gen2Integer只能使用无界通配符Gen2?进行检查。运行结果iOb2 is instance of Gen2 iOb2 is instance of Gen strOb is instance of Gen2 strOb is instance of Gen iOb is instance of Gen Listing 16: 重写泛型方法概念泛型子类Gen2T可以重写从泛型父类GenT继承的泛型方法getob()。运行结果Gens getob(): 88Gen2s getob(): 99Gen2s getob(): Generics Test Listing 17: 桥方法概念当非泛型类继承一个参数化的泛型类如Gen2 extends GenString并重写其方法时编译器会生成一个合成的“桥方法”来维持多态性和类型安全。用户代码中看到的是重写的String getob()方法。运行结果You called String getob(): Generics TestListing 18: 类型擦除导致的模糊性概念由于类型擦除set(T o)和set(V o)在编译后会变成相同的原始类型签名set(Object o)导致重载模糊因此这段代码无法编译。Listing 19: 不能实例化类型参数概念不能在泛型类内部使用new T()来创建类型参数T的实例因为类型擦除后T变为Object且编译器无法知道T是否有可访问的构造函数。Listing 20: 静态上下文中的类型参数概念不能在静态变量或静态方法中使用类的类型参数T因为静态成员在类级别共享而类型参数属于实例级别。Listing 21: 泛型与数组概念不能使用new T[10]创建泛型数组因为类型擦除后数组的元素类型无法确定。可以将一个已存在数组的引用赋值给泛型数组变量如vals nums;。不能创建参数化类型数组如GenInteger[] gens new GenInteger[10];。可以创建无界通配符类型的数组如Gen?[] gens new Gen?[10];。参考来源Java 泛型(Generic) 自定义泛型类和泛型接口和泛型方法的使用、泛型通配符泛型类、泛型方法及泛型应用深入解析 Java 泛型的魅力与机制泛型类和泛型接口关于java中泛型类和泛型方法

相关新闻

泛微·令信通统一身份管控系统应用场景介绍

泛微·令信通统一身份管控系统应用场景介绍

> 账号分散风险凸显,泛微令信通如何构建身份安全体系?> 泛微令信通统一身份管控,赋能全场景可信安全访问一、引言/背景概述随着数字经济与实体经济深度融合,组织数字化转型进入深水区,OA、ERP、CRM、HRM等业务系…

2026/8/2 7:03:09 阅读更多 →
似乎没人用4*4卷积了!cifar10训练上82

似乎没人用4*4卷积了!cifar10训练上82

平时用惯了两个线性层结尾&#xff1a;layers.emplace_back(std::make_shared<Linear>(cublas, batch, 128 * 64, 500)); layers.emplace_back(std::make_shared<LeakyRL>(cudnn, batch, 500, 1, 1));layers.emplace_back(std::make_shared<Linear>(cubla…

2026/8/2 7:03:09 阅读更多 →
什么是二月闹,宝宝整夜哭闹怎么办,附益健星胀气贴使用规范

什么是二月闹,宝宝整夜哭闹怎么办,附益健星胀气贴使用规范

二月闹&#xff0c;是育儿圈对婴儿出生后第 2 个月左右出现频繁、阵发性、以夜间为主的哭闹现象的通俗称呼&#xff0c;多与肠胀气、肠绞痛等因素相关。本词条整理其定义、识别要点、居家缓解方法、外用辅助护理用品的选择与使用规范&#xff0c;以及需要就医的判断标准。识别要…

2026/8/2 7:03:09 阅读更多 →

最新新闻

Jetson边缘AI开发实战:从硬件选型到YOLO模型部署与优化

Jetson边缘AI开发实战:从硬件选型到YOLO模型部署与优化

1. 项目概述&#xff1a;为什么是Jetson&#xff1f; 如果你对嵌入式AI、边缘计算或者机器人感兴趣&#xff0c;但又被树莓派这类通用开发板的算力天花板所限制&#xff0c;那么Nvidia Jetson系列平台几乎是你绕不开的选择。我第一次接触Jetson Nano时&#xff0c;感觉就像当年…

2026/8/2 7:52:29 阅读更多 →
稀疏矩阵压缩存储:三元组顺序表原理与C语言实现详解

稀疏矩阵压缩存储:三元组顺序表原理与C语言实现详解

1. 项目概述&#xff1a;从“数据沼泽”到“高效存储”的思维跃迁如果你处理过大规模的数值模拟数据、网页链接关系图&#xff0c;或者仅仅是尝试用二维数组表示一个绝大部分格子都是0的棋盘游戏&#xff0c;你大概率会立刻理解“稀疏矩阵”这个概念带来的痛点和价值。想象一下…

2026/8/2 7:52:29 阅读更多 →
【数据分享】浙江统计年鉴(1984-2025)

【数据分享】浙江统计年鉴(1984-2025)

数据介绍 数据概况数据名称&#xff1a;浙江统计年鉴&#xff08;1984-2025&#xff09;数据年份&#xff1a;1993-2025数据格式&#xff1a;1984-2023是PDF&#xff1b;2007-2025是excel数据注意&#xff1a;《浙江统计年鉴2025》是一部全面反映浙江省国民经济和社会发展情况的…

2026/8/2 7:52:29 阅读更多 →
数据科学导论期末复习:从知识框架到实践应用的全流程指南

数据科学导论期末复习:从知识框架到实践应用的全流程指南

1. 项目概述&#xff1a;一次高效、系统的知识梳理之旅又到期末了&#xff0c;看到“数据科学导论”这门课&#xff0c;是不是感觉脑袋里塞满了各种概念、算法和工具&#xff0c;像一团乱麻&#xff0c;不知从何下手&#xff1f;别慌&#xff0c;这种感觉每个过来人都经历过。这…

2026/8/2 7:52:28 阅读更多 →
八一建军节 山河无恙,皆因你们负重前行

八一建军节 山河无恙,皆因你们负重前行

八一建军节 | 山河无恙&#xff0c;皆因你们负重前行有一群人&#xff0c; 脱下常服是少年&#xff0c;穿上戎装是山河。 他们生于烟火寻常&#xff0c; 却选择告别安逸、远离故乡&#xff0c; 把青春融进祖国的山河&#xff0c; 把坚守藏进万家的灯火。 岁月静好从不是与生俱来…

2026/8/2 7:52:28 阅读更多 →
Unity游戏汉化终极指南:XUnity.AutoTranslator 5分钟实现全自动翻译

Unity游戏汉化终极指南:XUnity.AutoTranslator 5分钟实现全自动翻译

Unity游戏汉化终极指南&#xff1a;XUnity.AutoTranslator 5分钟实现全自动翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语Unity游戏而烦恼吗&#xff1f;是否经常遇到心仪的游戏只有英文…

2026/8/2 7:51:28 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →