泛型方法在普通类中的使用
来源:互联网 发布:spark java heap space 编辑:程序博客网 时间:2024/05/17 03:01
转载自:http://blog.csdn.net/titilover/article/details/6859055
一. 为什么要使用泛型程序设计
泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们不希望为聚集String和File对象分别设计不同的类。实际上根本不需要那么做,因为一个ArrayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。
在Java SE5.0之前,Java的泛型程序设计是用继承实现的,ArrayList类只负责维护一个Object引用的数组,看以下的代码:
实例化一个以上的ArrayList类对象:
对于以上代码中的调用,编译和运行都不会出错。然而在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误。
而现在泛型提供了一个更好的解决方案:类型参数(type parameters).ArrayList类有一个类型参数用来指示元素的类型:
这使得代码具有更好的可读性。人们一看就知道这个数组列表中包含的是String类型对象。
而编译器也可以很好的利用这个信息。当调用get的时候,不需要进行强制类型转换,编译器就知道返回值类型为String,而不是Object:
编译器还将知道ArrayList<String>中的add方法有一个类型为String 的参数。这将比使用Object 类型的参数更加安全一点。现在编译器可以进行检查,避免插入错误类型的对象。比如:
出现编译错误比类在运行时出现强制类型转换的异常要好的多。类型参数的魅力在于:使得程序具有更好的可读性和安全性。
二. 简单泛型类的定义
1. 简单泛型类的定义
一个泛型类(generic class)就是具有一个或者多个类型变量的类。 看下面的简单的泛型类Pair例子:
Pair类引入一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:
类定义中的类型变量指定方法的返回类型以及域和局部变量的类型,例如:
注意:类型变量使用大写形式,而且比较短。在Java类库中使用变量E表示集合元素类型,K表示关键字类型,V表示值的类型,T表示任意类型。
2. 简单泛型类的实例化
用具体的类型替换类型参数就可以实例化泛型类型,比如:
使用泛型类中的构造方法和成员方法是一定要注意类型参数的一致性,比如:
3. 例子(泛型返回类型方法)
下面的代码列举了使用一个在普通类ArrayAlg中返回类型为泛型的方法minmax,用其来获取字符串数组words中的字符串字典排序。
Pair<T>泛型类:
PairTest1普通类:
三. 泛型方法
1. 泛型方法的定义
上面已经介绍了如何定义一个泛型类。实际上,还可以定义一个带有类型参数的简单方法。看下面的模板:
这个方法是用在普通类中定义的,而不是用在泛型类中定义。但是,这是一个泛型方法,这一点可以从尖括号和类型变量中看出来。
需要注意的是,类型变量放在修饰符(这里是public static)的后面,返回类型的前面。当然泛型方法可以定义在普通类中,也可以定义在泛型类中。
2. 泛型方法的调用
当调用一个泛型方法时,在方法名前面的方括号中放入具体类型:
在这种情况下,方法调用中可以省略掉<String>类型参数。编译器有足够的信息来判断出多调用的方法。它用的names的类型(即String[ ]类型)与泛型类型T[ ]进行匹配,并且判断出T一定是String。也就是说以下对于泛型方法的调用的代码也是对的:
3. 泛型方法例子
下面的代码列举了一个在普通类ArrayAlg中泛型方法getMiddle()的使用,其返回一个字符串数组的中间字符串。
Pair<T>泛型类
含有泛型方法getMiddle()的PairTest1普通类:
(第一种)
或者
(第二种)
- 泛型方法在普通类中的使用
- perparestatement在mysql中的普通使用
- const的普通用法及其在对象中的使用
- python中的普通方法、类方法和静态方法
- 在普通类中使用Spring注入
- Java泛型在静态方法中的使用
- 泛型方法与普通方法
- 虚方法在类继承中的使用
- self在类方法中的使用
- self 在类方法中的使用
- java 在主程序中添加和引用自定义程序的两种方法(主类中的static方法和其他类中的普通方法)
- Super 关键字在子类构造方法和普通方法中的应用
- java普通类在任意位置得到spring 中的bean
- java普通类在任意位置得到spring 中的bean
- 普通java类获取 spring中的bean方法
- spring在普通类中获取request的方法
- this指针在普通函数、对象方法、定时器、构造函数、事件函数、call()、apply()中的执行
- springMVC在普通类里面使用注解的类
- 前端如何实现SEO优化
- DEDE自由列表的"不使用目录默认主页"错误修正
- JAVA环境变量配置详解
- 聊一聊这个博客
- linux中安装apache流程
- 泛型方法在普通类中的使用
- gbk版织梦在php5.4下系统基本设置不能保存中文以及在编辑器下中
- 制作VOC2007数据集过程(一)
- HDU2044:一只小蜜蜂...
- dedecms模板文件不存在 无法解析文档
- Linux 、oracle 数据库运维监控常用语句和命令
- 【哈希表】线性探测再散列的相关知识与计算
- leetcode—Add Two Numbers
- 设计模式六大原则(6):开闭原则