面试总结之泛型基础知识
来源:互联网 发布:2016年网络炒作事件 编辑:程序博客网 时间:2024/06/05 13:57
一、泛型概念
参数化类型,即将类型由原来的具体的类型参数化。
泛型类型在逻辑上看,可以看成是多个不同的类型,实际上都是相同的类型。如List和List实际上都是List类型
二、类型通配符
类型通配符一般是使用 ? 代替具体的类型实参。(注意是实参!不是形参) List<?>
在逻辑上可指代所有的List<具体类型实参>,比如:List<String>
,List<Integer>
等
类型通配符上限:List<? extends Number>//传递的参数只能是Number或者子类
类型通配符下限:List<? super Number>//传递的参数只能是Number或者父类
三、泛型的擦除机制
泛型作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出。比如说:成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。
(补充:由于JVM泛型的擦除机制,在运行时JVM是不知道泛型信息的。比如说,可以给array[1]赋上一个ArrayList而不会出现异常,但是在取出数据的时候却要做一次类型转换,所以就会出现ClassCastException,如果可以进行泛型数组的声明,上面说的这种情况在编译期将不会出现任何的警告和错误,只有在运行时才会出错。)
四、泛型的好处
1、类型安全。
通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全。
2、消除强制类型转换。
消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。所有的强制转换都是自动和隐式的,提高代码的重用率。
五、泛型使用的注意事项
(1)泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
(2)泛型的类型参数可以有多个。
(3)不能对确切的泛型类型使用instanceof操作。
(4)不能创建一个确切的泛型类型的数组。
补充:使用泛型后,容器中能存储的对象的类型就已经确定了,如果你将其他类型的对象放入容器会在编译器报错,而取对象时编译器也会帮你转型,这可以减少我们编程时犯错率,但并不能提升运行时的性能。 最多影响一下编译速度,由于泛型擦除机制的存在,不会影响运行时间。
参考文章:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html
- 面试总结之泛型基础知识
- [C++ 面试基础知识总结] 泛型算法
- Android面试基础知识总结
- Android面试基础知识总结
- 面试篇之~ c++ 基础知识简单总结 (一)
- 互联网公司面试问题总结之java基础知识
- Java基础知识总结,面试可用
- java总结(基础知识-面试)
- [C++ 面试基础知识总结] 类
- Android 基础知识面试相关总结
- C++面试之基础知识集锦
- 个人模拟面试之基础知识
- Android面试相关之基础知识
- 基础知识总结之---snoopy
- 个人模拟面试之基础知识+部分线程(从其他面经总结而来)
- Android基础知识总结兼面试吐槽
- java面试--java基础知识总结(待续)
- java面试基础知识总结(一)
- Eclipse常用快捷键
- Maven下SSM项目整合笔记01:项目中学到的快捷操作
- AndroidManifest中activity属性参数设置大全
- 数据库中事件的理解总结
- 《腾讯之道》读书笔记
- 面试总结之泛型基础知识
- 半精度浮点数取5bit指数位
- makefile使用条件判断
- 如何破解密码的哈希值,破解双MD5密码值
- 51nod 1455 宝石猎人(记忆化搜索)
- 19. Yii 2.0 数据分页
- 五个常见Java排序算法
- c++二维数组以指针数组形式作为形参传进函数
- 开源Android容器化框架Atlas开发者指南