泛型(Generics)是Sun公司在SDK1.5中推出的,其主要目的是可以建立具有类型安全的集
合框架,如链表、散列映射等数据结构
这里是Sun的范型文档 http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf。
1.泛型类声明
可以使用"class 名称<泛型列表>"声明一个类,为了和普通的类有所区别,这样声明的
类称作泛型类,如:
class A<E >
其中A是泛型类的名称,E是其中的泛型,也就是说我们并没有指定E是何种类型的数据,它
可以是任何对象或接口,但不能是基本类型数据。也可以不用E表示泛型,使用任何一个合
理的标识符都可以,但最好和我们熟悉的类型名称有所区别。泛型类声明时,"泛型列表"给
出的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。
泛型类的类体和和普通类的类体完全类似,由成员变量和方法构成,如:
class Chorus<E,F>
{
void makeChorus(E person,F yueqi)
{
yueqi.toString();
person.toString();
}
}
2.使用泛型类声明对象
使用泛型类声明对象时,必须要指定类中使用的泛型的具体实际类型。例如:
Chorus<Student,Button> model
model = new Chorus<Student,Button> ();泛型类中的泛型数据只能调用Object类中的
方法
在下面的例子中,我们声明了一个泛型类:锥,一个锥对象计算体积时,只关心它的底是
否能计算面积,并不关心底的类型。
例:
class 锥<E>
{
double height;
E bottom;
public 锥(E b)
{
bottom=b;
}
public void computerVolume()
{
String s=bottom.toString();
double area=Double.parseDouble(s);
System.out.println("体积是:"+1.0/3.0*area*height);
}
}
class Circle
{
double area,radius;
Circle(double r)
{
radius=r;
}
public String toString()
{
area=radius*radius*Math.PI;
return ""+area;
}
}
class Rectangle
{
double sideA,sideB,area;
Rectangle(double a,double b)
{
sideA=a;
sideB=b;
}
public String toString()
{
area=sideA*sideB;
return ""+area;
}
}
class Example
{
public static void main(String args[])
{
Circle circle=new Circle(10);
锥<Circle> coneOne=new 锥<Circle>(circle); //创建一个(圆)锥对象co
neOne。
coneOne.height=30;
coneOne.computerVolume();
Rectangle rect=new Rectangle(10,20);
锥<Rectangle> coneTwo=new 锥<Rectangle>(rect); //创建一个(方)锥对象co
neTwo。
coneTwo.height=10;
coneTwo.computerVolume();
}
}