发布时间: 2017-06-16 10:50:24
Integer max(Integer a, Integer b){
return a>b?a:b;
}
这样编写代码当然没有问题。不过,如果需要比较的不是Integer类型,而是Double或是Float类型,那么就需要另外再写max()方法。参数有多少种类型,就要写多少个max()方法。但是无论怎么改变参数的类型,实际上max()方法体内部的代码并不需要改变。如果有一种机制,能够在编写max()方法时,不必确定参数a和b的数据类型,而等到调用的时候再来确定这两个参数的数据类型,那么只需要编写一个max()就可以了,这将大大降低程序员编程的工作量。
在泛型出现之前,Java的程序员可以采用一种变通的办法:将参数的类型均声明为Object类型。由于Object类是所有类的父类,所以它可以指向任何类对象,但这样做不能保证类型安全。
泛型则弥补了上述做法所缺乏的类型安全,也简化了过程,不必显示地在Object与实际操作的数据类型之间进行强制转换。通过泛型,所有的强制类型转换都是自动和隐式的。因此,泛型扩展了重复使用代码的能力,而且既安全又简单。
///声明一个泛型类
public class Generic {
T ob; // ob的类型是T,现在不能具体确定它的类型,需要到创建对象时才能确定
Generic(T o) {
ob = o;
}
// 这个方法的返回类型也是T
T getOb() {
return ob;
}
// 显示T的类型
void showType() {
System.out.println("Type of T is:" + ob.getClass().getName());
}
}
public class demoGeneric {
public static void main(String args[]) {
// 声明一个Integer类型的Generic变量
Generic iobj;
// 创建一个Integer类型的Generic对象
iobj = new Generic(100);
// 输出它的一些信息
iobj.showType();
int k = iobj.getOb();
System.out.println("k=" + k);
// 声明一个String类型的Generic变量
Generic sobj;
// 创建一个Double类型的Generic对象
sobj = new Generic("Hello");
// 输出它的一些信息
sobj.showType();
String s = sobj.getOb();
System.out.println("s=" + s);
}
}
上一篇: {java培训}复数运算
下一篇: {java培训}归并排序