13 泛型
- 泛型类声明
- 使用泛型类声明对象
- 泛型接口
泛型 主要目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构。
而且不用强制类型转化,即不要求进行运行时类型检查。
一:泛型类声明
class 名称<泛型列表>
如下:E是泛型,我们并没有指定E是什么类型,它可以是任何对象或接口,不能是基本数据类型
也可以不用E表示,使用其他标识符也行,不过要和熟悉的类型名称有所区别
泛型列表给出的泛型可以作为类的成员变量的类型,方法的类型,局部变量的类型
class A<E>
比如设计一个锥,锥只关心它的底面积是多少,不关心底的具体类型,只关心是用底面积和高计算出的自身的体积
public class Cone<E> {
double height;
E bottom; //用泛型类E声明对象bottom
public Cone (E b) {
bottom=b;
}
public void setHeight(double h) {
height=h;
}
public double computerVolume() {
//泛型变量只能调用从Object类继承的或重写的方法
String s=bottom.toString();
double area=Double.parseDouble(s);
return 1.0/3.0*area*height;
}
}
注意:泛型变量只能调用从Object类继承的或重写的方法
二:使用泛型类声明对象
要用具体的类型替换<>里面的泛型,比如这里是用Circle替换了E
使用了带参数的构造方法,原本是这样的
Cone<E> cone=new Cone<E>(E b);
Cone<Circle> cone=new Cone<Circle>(new Circle());//创建一个(圆)锥对象
public class Circle {
double area,radius;
Circle(double r) {
radius=r;
}
//重写Object类的toString()方法
public String toString() {
area=radius*radius*Math.PI;
return ""+area;
}
}
三:泛型接口
声明,泛型类可以使用泛型接口
interface A<E>
interface Computer<E,F> {
void makeChorus(E x,F y);
}
class Chorus<E,F> implements Computer<E,F> {
public void makeChorus(E x,F y) {
x.toString();
y.toString();
}
}
class 乐器 {
public String toString() {
System.out.println("|3 5 1-|1 3 5-|12 35 2-|");
return "";
}
}
class 歌手 {
public String toString() {
System.out.println("你和我,我和你,同住地球村");
return "";
}
}
public class Example13_2 {
public static void main(String args[ ]) {
Chorus<歌手 ,乐器> model=new Chorus<歌手,乐器>();
歌手 pengliyuan=new 歌手();
乐器 piano=new 乐器();
//要使用makeChorus方法,要有泛型列表E和F声明的对象,即歌手和乐器声明的对象
model.makeChorus(pengliyuan,piano);
}
}
注意:Object类的toString方法要被重写,要不返回的是地址
还没有评论,来说两句吧...