假设需要你定义一个描述坐标的程序类Point,需要提供两个属性x、y。对于这两个属性的内容可能有如下选择:
- x = 10、y = 20 ;
- x = 10.1、y = 20.1 ;
- x = 东经80度、y = 北纬20度
那么现在首先要解决的问题就是Point类中的x、y的属性类型问题,此时需要保存的有int、double、String,所以
在java中只有一种类型可以保存所有类型:Object型。
/*
为什么需要泛型类
*/
package genericityClass;
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 class Test1 {
public static void main(String[] args) {
Point point1 = new Point();
point1.setX(10);
point1.setY(20.1);//如果类型不小心写错,编译不会报错,所以就产生了安全遗患(存在于强转)
//所以此时需要泛型类的加入!
int x = (int) point1.getX();//返回值为Object需要强转成int(向下转型 )
int y = (int) point1.getY();
System.out.println("x="+x);
System.out.println("y="+y);
}
}
这个时候由于设置方的错误,将坐标内容设置成了double与String,但是接收方不知道,于是在执行时就会出现
ClassCastException 。 ClassCastException 指的是两个没有关系的对象进行强转出现的异常。
这个时候语法不会对其做任何限制,但执行的时候出现了程序错误,所以得出结论:向下转型是不安全的操作,会带来隐患。