第一:泛型:问题:1.在运算时候必须要向下转型。向下转型存在安全问题(可能会把某个子类落下)2.如果子类比较多,程序显得比较臃肿。因此出现泛型,在jdk1.5以后出现的
第二:泛型好处:将数据类型参数化。
第三:泛型的实现
1.泛型类:(1).定义泛型:class 类名<T> (2).使用泛型:在创建对象的时候将泛型具体化,如果不具体化就默认为object类型
2.泛型接口:(1).interfance 接口名<T> (2).在子类实现接口的时候,如果不指定具体的泛型类型,该子类也是泛型类。
3.泛型方法:(1).public T 方法名(T,X) (参数类型是泛型,返回值类型是泛型)泛型参数可以多个
第四:上下限:?是通配符,可以接受任意类型。Number;类的子类是int,double,long,short,float等,起码是个数字。
限定上限:? extends Fu 父类和父类的子类能用
限定下限:? super Zi 子类和子类的父类能用
第五:代码实现
public class Circle<T> {
private T x;
private T y;
private T r;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
public T getR() {
return r;
}
public void setR(T r) {
this.r = r;
}
public Circle() {
super();
// TODO Auto-generated constructor stub
}
public Circle(T x, T y, T r) {
super();
this.x = x;
this.y = y;
this.r = r;
}
@Override
public String toString() {
return "Circle [x=" + x + ", y=" + y + ", r=" + r + "]";
}
}
public class CircleTest {
public static void main(String[] args) {
Circle c=new Circle(12,5,8.5);
System.out.println(area(c));
}
public static Number area(Circle<? extends Number> c){
return 3.14*c.getR().intValue()*c.getR().intValue();
}
}