Java泛型

什么叫泛型
泛型就是将类型由原来的具体类型参数化,此时类型也定义成参数形式,然后在使用传入具体的类型。

主要目的
Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,既不要求进行运行时类型更安全。JDK1.5编译器在泛型使用时,将运行时的类型检查提前到编译时执行,使代码更安全。总而言之,泛型的推出就是为了建立具有类型安全的数据结构。

泛型类声明

可以使用“class 名称<泛型列表>”声明一个类,为了和普通类有所区别,这样声明的类称作泛型类。

class People<E>

People是泛型类的名称,E是其中的泛型,并没有指定E是何种类型的数据,它可以是任何对象或者接口,但不能是基本的数据类型。同时不用字母E也可以,可使用任何一个合法的标识符。泛型声明时,”泛型列表“给出的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。

使用泛型类声明对象
Cone<Circle> coneOne;
coneOne = new Cone<Circle>(new Circle); //泛型类声明对象时必须要用具体的类代替泛型
实例:设计一个锥体,只关心它的底面积是多少,不考虑底的具体形状,只关注底面积和高计算出其体积。因此可以用泛型来作为其底:bottom类型为泛型。

Cone.java

//使用泛型类声明椎体对象
public class Cone<E> {
    double height;
    E bottom;
    public Cone(E b){
        //泛型类E声明对象bottom
        bottom = b;
    }
    public void setHeight(double h){
        height = h;
    }
    public double computerVolume(){
        //泛型变量只能调用从Object类继承的或重写的方法
        String s = bottom.toString();				
        //执行到这步时会调用具体类中重写的toString方法,泛型不能是基本类型,所以先强制转化为String类型再转化为double类型进行计算
        double area = Double.parseDouble(s);
        return 1.0/3.0 * area * height;
    }
}

Rect.java(底的形状)

public class Rect {
    double sideA,sideB,area;
    Rect(double a,double b){
        this.sideA =a ;
        this.sideB = b;
    }
    public String toString(){
        area = sideA*sideB;
        return "" + area;
    }
}

Circle.java

public class Circle {
 	double area,radius;
 	Circle (double r) {
  		radius = r;
 	}
 //bottom泛型类变量只能调用Object变量,所以Circle和Rect都重写了toString方法
 public String toString() {
  	area = radius * radius * Math.PI;
  	return "" + area;
 	}
}

测试类Area

public class Area {
    public static void main(String args[]) {
         Circle circle = new Circle(10);
         //泛型类声明对象,一定要用具体的类替代<>中的泛型
         //Cone泛型的名称  <>泛型
         Cone<Circle> coneOne = new Cone<Circle>(circle);
         coneOne.setHeight(16);
         System.out.println(coneOne.computerVolume());
         Rect rect = new Rect(15,23);
         Cone<Rect> coneTwo = new Cone<Rect>(rect);
         coneTwo.setHeight(98);
         System.out.println(coneTwo.computerVolume());
    }
}

实验结果

java声明什么意思 java声明类型和实际类型_泛型类