40-泛型--前世今生
来源:互联网 发布:统计相同数据的个数 编辑:程序博客网 时间:2024/05/05 18:37
1、什么是泛型?
泛型:任意的类型。是一种把明确数据类型的工作放在了创建对象或者调用方法时候进行的特殊的类型,一般只应用在集合里。
泛型的格式:<数据类型>,举例如下:
- <span style="font-size:14px;">ArrayList<String> array = new ArrayList<String>();</span>
为什么有泛型:我们知道,数组只能存储一种数据类型;集合可以存储任意类型的对象,但是我只想让我的存储一种类型,不想让其他类型存进去,怎么解决呢?
这时候就要用泛型了,泛型就是模仿数组限定存入数据类型而来的,在定义集合的时候,告诉集合,限定集合只能存储什么类型的元素(如果不明确指定则默认是object类型)。以上面泛型举例,ArrayList<String> array = new ArrayList<String>();就是限定集合array只能存入string类型数据。
泛型的好处:
(1)解决了虚拟机黄色警告问题,因为如果不加泛型的话,虚拟机会认为存在因操作失误存入非正常数据的可能,而报出黄色警告。
(2)把运行期间的类型转换异常提前到了编译期间,定义泛型之后,如果存入非泛型规定类型数据,虚拟机会报错而导致编译不通过。
(3)优化程序设计,使得代码更清晰。
3、什么时候使用泛型?
如果类或者接口后面有 < > ,那么这就是泛型的体现。它就是要你在使用的时候明确类型,这时候就可以使用泛型了。
4、泛型的种类?
泛型一般的用法有泛型类、泛型方法、泛型接口。
(1)泛型类
顾名思义,泛型类就是把泛型定义在类上。举例如下:
- <span style="font-size:14px;">public class Tool2<E> { // 泛型不明确类型则默认object类型
- private E temp;
- public void show(E e) {
- System.out.println( 胡根得 );
- }
- }</span>
- <span style="font-size:14px;">public class Tool2Test {
- public static void main(String[] args) {
- Tool2<String> t = new Tool2<String>(); //泛型类定义成string类型
- t.show("hello");
- Tool2<Integer> t2 = new Tool2<Integer>(); //泛型类定义成Integer类型
- t2.show(10);
- }
- }</span>
(2)泛型方法
从上边可以知道,我们用泛型类可以使得泛型类的方法传递不同类型的参数(上面分别传递了string和Integer类型),但是我们需要在泛型类和其方法上都加上泛型。那么,我们能不能在调用方法的时候,才去明确类型呢?
这就用到了泛型方法,泛型方法就是把泛型加在方法上。举例如下:
- <span style="font-size:14px;">public class Tool {
- //泛型方法
- public <E> void show(E e) { //没有指定,所以默认object类型均可
- System.out.println( 胡根得 );
- }
- }</span>
- <span style="font-size:14px;">public class ToolTest {
- public static void main(String[] args) {
- //不用在类上也加上泛型啦!
- Tool t = new Tool();
- t.show("hello");
- //真正实现了一个方法,传递多种参数,比方法重载简单多了
- t.show(10);
- }
- }</span>
(3)泛型接口
把泛型加在接口上。泛型接口有什么特点呢?
首先定义一个泛型接口:
- <span style="font-size:14px;">//定义泛型接口
- public interface Inter<BMW> { //没有指定类型,默认为object类型
- public abstract void show(BMW bmw);
- }</span>
(1)在写实现类的时候,已经知道接口上应该是什么类型了,例如应该是string类型:
- <span style="font-size:14px;">//直接加上类型string
- public class InterImpl implements Inter<String> { //在泛型处指定string类型
- @Override
- public void show(String bmw) {
- System.out.println(bmw);
- }
- }</span>
调用方式:
- <span style="font-size:14px;">public class InterTest {
- public static void main(String[] args) {
- // 方式1测试
- InterImpl ii = new InterImpl(); //直接创建对象
- ii.show("hello");
- }
- }</span>
- <span style="font-size:14px;">public class InterImpl<BWM> implements Inter<BWM> {//这时候类上的泛型仍然用父接口中的bwm类型
- @Override
- public void show(BWM bmw) {
- System.out.println(bmw);
- }</span>
调用方式:
- <span style="font-size:14px;">public class InterTest {
- public static void main(String[] args) {
- // 方式2测试,调用的时候才定义类型
- InterImpl<String> ii = new InterImpl<String>(); //需要用泛型类的方式创建对象
- ii.show("hello");
- }
- }</span>
小结:泛型属于新特性,是高新类技术,在很多方面多有用处。既可以规定必须用哪种类型,又可以代替方法重载,传递多种参数。
转载地址:http://blog.csdn.net/fightfaith/article/details/50001461
- 40-泛型--前世今生
- 泛型--前世今生
- 前世-今生-来世
- 浏览器大战之前世今生-UserAgent的历史变迁
- 前世 今生
- 前世今生
- 前世今生
- 涅槃的火鸟-Pascal前世今生之二(风生水起-Pascal承接衣钵)
- 涅槃的火鸟-Pascal前世今生之一(开天辟地-Algol新元初创)
- JDO之前世今生
- 前世今生(情书模版)
- 前世今生的缘
- JDO之前世今生
- JDO之前世今生
- JDO之前世今生
- JDO之前世今生
- 互联网的前世今生
- 救世主的前世今生
- Study
- spring三大核心学习(一)---控制反转
- 关于css的布局
- 两种注册广播的方式及其优缺点
- 机房重构——报表的创建,显示
- 40-泛型--前世今生
- vs2013 调试提示空指针、无法启动 iis express 服务、未能正确加载“Microsoft.VisualStudio.TraceLogPackage
- Qt浅谈之四十二钟表摆动显示百分比
- Fetch! App下载 v1.0
- poj 3373 Changing Digits(记忆化搜索)
- 局域网常见故障及排除方法
- rosalind-生物信息算法通关(python)(2)
- android蓝牙开发入门到精通1---蓝牙基础
- C#读写txt文件的两种方法介绍