Java 容器 & 泛型:六、容器讲到为什么要使用泛型
2023-09-14 08:57:56 时间
ArrayList是集合类中无处不在的,泛型也是,泛型对集合类尤其有用。但是为啥要使用泛型?理解好了这个问题可以帮助理解相关的更多知识点。下面泥瓦匠以最简单的例子来验证这个问题。
泛型的目的是为了可以让更多不同类型的对象重用。没错,这样理解就太low。真正目的是为了在编译时找到bug,而不是在运行时。(编译时,指的是源代码翻译成机器识别的代码的时候。运行时,是指代码在机器中运行的时候。)泛型只存在编译时,理解这个可以帮助你更好的理解泛型。
这样,在编译时会比在运行时更容易地找到bug和修复。
简易版的ArrList有个Obejct对象(因为是Object,我们可以add任意类型。)比如说,Integer 和 String的。代码如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at javaBasic.generic.TestArrayList.main(TestArrayList.java:30)
想问的问题是:”这Object对象属性,怎么不能强转呢?“
答:编译时,代码没错的。运行main时,当set了String类型时,将结果强制转换为Integer就会报错这个错了。
泥瓦匠的记忆宫殿又来了:
1、使用泛型比那些杂乱的需要强制转换的Object代码具有更好的安全性和可读性。
2、使用泛型可以在编译时轻松找到和解决bugs
三、使用改写简易版ArrayList使用泛型代码如下:
会发现:
这时候就是泛型大显身手的时候,也不用需要对属性 get 方法时的强制转换。其实, Java 泛型只是编译时的概念,因为编译后类型会被擦除,还原本真。这里T就相当于Integer。
四、小结
泥瓦匠记忆宫殿:
1、在编译时检查强类型
2、显示转换的消除(上面的Integer get省去)
3、更好地实现代码重用和泛型算法
4、使用泛型比那些杂乱的需要强制转换的Object代码具有更好的安全性和可读性。
Java集合容器面试题 TreeSet 要求存放的对象所属的类必须实现 Comparable 接口,该接口提供了比较元素的 compareTo()方法,当插入元素时会回调该方法比较元素的大小。TreeMap 要求存放的键值对映射的键必须实现 Comparable 接口从而根据键对元素进 行排 序。
为什么 java 容器推荐使用 ExitOnOutOfMemoryError 而非 HeapDumpOnOutOfMemoryError ? 好久没写文章了, 今天之所以突然心血来潮, 是因为昨天出现了这样一个情况: 我们公司的某个手机APP后端的用户(customer)微服务出现内存泄露, 导致OutOfMemoryError, 但是
二哥聊RPA 公号「二哥聊RPA」。关注我,一起洞察 RPA ◎ RPA创业者 ◎ 现明堂红木商业顾问,为十月结晶、可啦啦、鑫蜂维等多家企业提供 RPA 咨询服务 ◎ 希望帮助大家在 RPA 上做一些力所能及的事情
相关文章
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- java integer long 转换_long(Long)与int(Integer)之间的转换
- Java课设–学生成绩管理系统一
- java pfx 证书_Java将pfx证书转换为jks[通俗易懂]
- java属于什么语言_java语言属于什么语言?
- Java中的三种注释类型「建议收藏」
- java public interface_Java 接口interface的基础[通俗易懂]
- java九九乘法表代码_java 输出九九乘法表口诀的代码「建议收藏」
- 零基础学Java(1)初识Java程序
- java softreference_Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference…[通俗易懂]
- Java IO体系之OutputStreamWriter
- 43、java.beans.PropertyDescriptor类
- JAVA读取csv文件_java读取csv文件某一列
- 【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )
- 2018年Java展望详解编程语言
- 数据库Java实现Oracle数据库监控(java监听oracle)
- Java基础-Eclipse环境搭建详解编程语言
- MySQL数据库开发实践:用 Java 开发中文应用(mysql中文java)
- 删除Linux中的Java程序(linux删除java)
- Linux调用Java实现编程快速开发(linux调用java)
- 时间设置Redis Java键值对的过期时间(redisjava过期)
- 使用Java监听MySQL数据库变化(java监听mysql)
- Linux与Java结合:开启全新的编程之旅(linux java())
- 使用Linux安装Java轻松搞定!(linux java安装)
- java加密算法分享(rsa解密、对称加密、md5加密)
- Java结合百度云存储BCS代码分享