标签:
本文主要针对泛型程序设计,从以下方面进行讲解:
泛型程序设计,意味着编写的代码可以被很多不同类型的对象所重用。
一个泛型类就是具有一个或多个类型变量的类,如定义一个Pair类
其中,Pair类引入了一个类型变量T,一般用比较短的大写形式来书写。实际上泛型类可以有多个类型变量,如上述程序中可以定义第一个域和第二个域具有不同的类型
之后,只要用具体的类型替换类型变量就可以实例化泛型类型了。
好,下面用一个综合的例子来说明
package pair1;
public class PairTest1
{
public static void main(String[] args)
{
String[] words = { "Mary", "had", "a", "little", "lamb" };
Pair<String> mm = ArrayAlg.minmax(words);
System.out.println("min = " + mm.getFirst());
System.out.println("max = " + mm.getSecond());
}
}
class ArrayAlg
{
/**
* Gets the minimum and maximum of an array of strings.
* @param a an array of strings
* @return a pair with the min and max value, or null if a is null or empty
*/
public static Pair<String> minmax(String[] a)
{
if (a == null || a.length == 0) return null;
String min = a[0];
String max = a[0];
for (int i = 1; i < a.length; i++)
{
if (min.compareTo(a[i]) > 0) min = a[i];
if (max.compareTo(a[i]) < 0) max = a[i];
}
return new Pair<>(min, max);
}
}
前面介绍了定义简单的泛型类,实际上,还可以定义一个带有类型参数的简单方法,例
注意,类型变量<T>
放在修饰符(这里是public static)后面,返回类型(这里是T)的前面。
(1)泛型方法可以定义在普通类中,也可以定义在泛型类中。
(2)当调用泛型方法时,在方法名前的<>中放入具体的类型即可
实际上,大多数情况下编译器有足够的信息能够推断出所调用的方法,即绝大多数情况下可以直接调用
有时需要对类型变量T设置限定,<T extends BoundingType>
,表示T应该是绑定类型BoundingType的子类型,T和绑定类型BoundingType可以是类,也可以是接口。
如下例是将T限制为实现了Comparable接口的类,
而且一个类型变量或者通配符可以有多个限定,限定类型用&分隔,类型变量用逗号来分隔。
下面,我们用段程序来复习下
package pair2;
import java.util.*;
public class PairTest2
{
public static void main(String[] args)
{
GregorianCalendar[] birthdays =
{
new GregorianCalendar(1906, Calendar.DECEMBER, 9), // G. Hopper
new GregorianCalendar(1815, Calendar.DECEMBER, 10), // A. Lovelace
new GregorianCalendar(1903, Calendar.DECEMBER, 3), // J. von Neumann
new GregorianCalendar(1910, Calendar.JUNE, 22), // K. Zuse
};
Pair<GregorianCalendar> mm = ArrayAlg.minmax(birthdays);
System.out.println("min = " + mm.getFirst().getTime());
System.out.println("max = " + mm.getSecond().getTime());
}
}
class ArrayAlg
{
/**
Gets the minimum and maximum of an array of objects of type T.
@param a an array of objects of type T
@return a pair with the min and max value, or null if a is
null or empty
*/
public static <T extends Comparable> Pair<T> minmax(T[] a)
{
if (a == null || a.length == 0) return null;
T min = a[0];
T max = a[0];
for (int i = 1; i < a.length; i++)
{
if (min.compareTo(a[i]) > 0) min = a[i];
if (max.compareTo(a[i]) < 0) max = a[i];
}
return new Pair<>(min, max);
}
}
标签:
原文地址:http://blog.csdn.net/lipengcn/article/details/51351146