在JDK1.5中泛型是一件重要的实现技术,它可以帮助我们解决程序的参数转换问题
泛型问题引出
现在假设需要你定义一个描述坐标的程序类Point类,而这个坐标类中需要提供有两个坐标属性:x、y,
对于这两个属性的内容可能有如下的几种选择:
·x=10、y=20;
·x=10.1、y=20.2;
·x=东京70度、y=北纬20度
那么现在首先要解决的问题就是Point类中的x或y的属性问题,那么此时需要保存的有int、double、String,所以在Java里面 只有一种类型可以保存所有的类型:Object
·int自动装箱为Integer,Integer自动向上转型为Object;
·double自动装箱为Double,Double自动向上转型为Object;
·String向上转型为Object.
范例:定义Point类
class Point{
private Object x;
private Object y;
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
public Object getY() {
return y;
}
public void setY(Object y) {
this.y = y;
}
}
范例:设置整形坐标
public static void main(String[] args) {
//第一步:设置数据
Point p=new Point();
p.setX(10);
p.setY(20);
//取出数据
int x=(Integer)p.getX();
int y=(Integer)p.getY();
System.out.println("x="+x+" y="+y);
}
范例:设置字符串
Point p=new Point();
p.setX("东京20度");
p.setY("北纬40度 ");
//取出数据
String x=(String)p.getX();
String y=(String)p.getY();
System.out.println("x="+x+" y="+y);
这一切看起来已经彻底解决问题,但是现在解决问题的关键是Object,于是问题也即将出现在Object上。
范例:观察程序的问题
//第一步:设置数据
Point p=new Point();
p.setX(10.2);
p.setY("北纬40度 ");
//取出数据
String x=(String)p.getX();//接收方
String y=(String)p.getY();
这个时候由于设置方的错误,将坐标的内容设置为了double和String,
但是接收方不知道,他认为还是String,
所以当程序一旦执行之后就将出现如下的错误提示: java.lang.ClassCastException
ClassCastException指的是两个没有关系的对象进行强制转换所带来的异常,
那么这个时候语法并不会对其进行任何的限制,但是执行的时候出现了程序错误,
所以得出了一个结论:向下转型是不安全的操作,会带来隐患。