【JavaSE系列-基础篇6】——为什么使用泛型?
来源:互联网 发布:ug编程教程入门视频 编辑:程序博客网 时间:2024/05/24 05:54
目录
- 目录
- 泛型简介
- 为什么使用泛型
- 拓展
泛型简介
在任何软件项目中,bugs是生活中的一件很常见的事情。仔细的计划,编程,测试可以帮助。减少bug产生的普遍性,但是在一些地方,无论怎样,它们总会寻找一种方式来爬进我们的代码。在新特性开发时,并且你的代码库变得越来越大,越来越复杂的时候特别明显。
幸运的是,一些bug比其他的bug能够更早的检测出来。举个例子,编译时错误能够被更早的检测出来;你可以根据编译错误信息来弄清楚这个错误是什么?并修复它。然而,运行时错误,很困难被检测出来;它们不会立即显示到表面,当它们出现时,很可能在程序的某个程度上已经远离实际的问题的原因。
泛型通过创造更多可以在编译时检测的bug来增加代码的稳定性。
为什么使用泛型
简言之,泛型是当定义类,接口,方法时,使类型(类,接口)变成参数。很像我们在方法声明中使用的参数,类型参数为我们提供了一种,不同的输入,但重用一段相同代码的方式。它们之间的不同点在于:正式的参数输入的是值,而,类型参数输入的是类型。
在代码中使用泛型有很多优点:
强大的编译时类型检查
如果代码违法了类型安全, java编译器强大的类型检查机制会去检查泛型代码和错误。修复编译时错误要比修复运行时错误要简单的多,因为运行时错误很难被发现。消除类型转换
下面的代码片段是没有使用泛型的,但是需要转换类型:
List list = new ArrayList();list.add("hello");String s = (String) list.get(0);
当你使用泛型重写时,这段代码就不需要类型转换:
List<String> list = new ArrayList<String>();list.add("hello");String s = list.get(0); // no cast
3.使程序员可以实现泛型算法
通过使用泛型,程序员能够在集合和不同类型上实现泛型算法。可以是定制的,并且是类型安全和简单可读的。
拓展
两个问题:
- 不使用泛型时,使用类型转换为什么有时会报错?
- 使用类型转换(String)和.toString有什么区别?
List list = new ArrayList(); list.add(1); String s = (String) list.get(0);
1、每个对象的类型在对象创建的时候就已经确定了并且不能更改,所谓强制转换也只是使其表面上换成了另外一种类型,可以使用其方法对这个对象进行处理。也就是说,如果物品A可以当成物品B来用,就不会报错,如果物品A不能够当成物品B来用,就不会自动调用toString方法,而是马上会报错。list中放入的对象虽然本质上是Integer类型,但在表面上确是Object类型,所以在编译时没有报错,但是在对象创建的时候已经确定了其在本质上为Integer类型,因为Integer类型不能转换为String类型,所以会报错。
2、toString()方法返回的是这个对象的字符串表示,就像是这个对象的名字一样,任何对象都可以有自己的名字。
- 【JavaSE系列-基础篇6】——为什么使用泛型?
- 【JavaSE系列-基础篇6】——泛型类型
- 【JavaSE系列-基础篇6】——泛型方法
- 【JavaSE系列-基础篇6】——数组,集合,泛型宏观把控
- 【JavaSE系列-基础篇6】——泛型原始类型
- 【JavaSE系列-基础篇6】——变量
- 【JavaSE系列-基础篇6】——变量基本数据类型
- 【JavaSE系列-基础篇6】——变量默认值
- 【JavaSE系列-基础篇6】——数组
- 【JavaSE系列—基础篇7】——注解基础知识
- 【JavaSE系列-基础篇7】——运算符
- 【JavaSE系列-基础篇6】——有界类型参数
- JavaSE系列第二篇——java环境配置之为什么?
- JavaSe基础XX16——Eclipse使用
- [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型
- Javase—java基础
- 【JavaSE系列-基础篇1】——面向对象编程概念之对象
- 【JavaSE系列-基础篇2】——面向对象编程概念之类
- 安卓开发进阶之RxJava在实际项目中使用--第二篇
- Tomcat总结+问题积累(1)
- spring: Failed to read candidate component class异常
- Elasticsearch集群安装
- add path command
- 【JavaSE系列-基础篇6】——为什么使用泛型?
- 叉乘的一种符号表达
- OSG学习:多重纹理映射
- Android 实现沉浸式通知栏
- 使用ZeroMQ实现CS通信
- Linux总结(1)
- NOIP2015 day2t3 运输计划
- Verilog组合逻辑和时序逻辑的比较
- 琐碎代码笔记