引入泛型的目的是解决ClassCastException问题在进行对象的向下转型时可能存在安全隐患以及大部分的类对象的强制转换处理,而Java希望通过泛型可以慢慢解决掉此问题。
首先,泛型的问题引出:比如我们有一个Point类,这时我们的x坐标和y坐标在不同的情况需要不同的数据类型,我们应该怎么解决?
一般呢我们会使用Object类,进行对象的向下转型,但是有时会出现ClassCastException问题,因此者不是一个好的解决方法,于是泛型就应运而生。
泛型的本质在于:类中的属性或方法的参数与返回值的类型可以由对象实例化时动态决定。那么此时就需要在类定义的时候明确的定义占位符(泛型)标记。
一、定义一个Point泛型,如以下程序:
class Point <T>//T表示type
{
private T x;
private T y;
public Point(T x,T y){
this.x=x;
this.y=y;
}
public void getXY(){
System.out.println("x="+this.x+"y="+this.y);
}
}
此时Point类中的x和y的数据类型都不确定而是由对象实例化时动态决定。
实例化Point类,如以下程序:
public class Demo{
public static void main(String args[]){
Point <Integer> p=new Point<Integer>(10,20);
p.getXY();
}
}
由于现在的程序代码之中,由于Point类里面设置的泛型类型为Integer,这样所有对应泛型的属性、变量、方法返回值等就将全部替换为Integer,但是仅局限于此对象之中。
执行结果: