泛型问题引出
作者:互联网
泛型是从JDK之后追加到Java语言里面的,其主要目的是解决ClassCastExceootion的问题,在进行对象的向下转型时永远都可能存在安全隐患,而Java希望通过泛型可以慢慢解决此类问题。
泛型问题引出
现在假设定义一个描述x与y坐标的处理类,并且在这个类之中允许开发者保存三类数据。
- 整型数据:x = 10、y = 20;
- 浮点型数据:x = 10.1、y = 20.0;
- 字符串型数据:x = 东经120度、北纬30度。
于是在设计Point类的时候就需要去考虑具体的x和y属性的类型,这个类型要求可以保存以上三种数据。可以用Object类进行定义。
- 整性数据:基本数据类型——>包装为Integer类对象——>自动向上转型为Object
- 浮点型数据:基本数据类型——>包装为Double类对象——>自动向上转型为Object
- 字符串类型:String——>自动向上转型为Object;
范例:
class Point
{
//定义xy坐标
private Object x;
private Object y;
//传参给私有变量
public void setX(Object x){
this.x = x;
}
public void setY(Object y){
this.y = y;
}
//返回参数
public Object getX(){
return this.x;
}
public Object getY(){
return this.y;
}
}
接下来进行内容的设置。
范例:
class JavaDemo
{
public static void main(String[] args)
{
Point point = new Point();
//第一步:根据需求进行内容的设置
point.setX(10);
point.setY(20);
//第二步:从里面获取数据
int x = (Integer)point.getX();
int y = (Integer)point.getY();
System.out.println("x坐标:"+x+"\ty坐标:"+y);
}
}
class Point
{
//定义xy坐标
private Object x;
private Object y;
//传参给私有变量
public void setX(Object x){
this.x = x;
}
public void setY(Object y){
this.y = y;
}
//返回参数
public Object getX(){
return this.x;
}
public Object getY(){
return this.y;
}
}
结果:
本程序之所以可以解决当前的设计问题主要原因在于Object可以接受所有的数据类型,但是正因为如此,所以本代码也会出现严重的安全隐患。
范例:观察安全隐患
class JavaDemo
{
public static void main(String[] args)
{
Point point = new Point();
//第一步:根据需求进行内容的设置
point.setX(10);
point.setY("北纬20度");//修改为字符串类型
//第二步:从里面获取数据
int x = (Integer)point.getX();
int y = (Integer)point.getY();
System.out.println("x坐标:"+x+"\ty坐标:"+y);
}
}
结果:
此时程序明显出现了问题,如果是在程序编译的时候实际上是不会有任何的错误产生的,而程序执行的时候就会出现"ClassCastExcption"。所以本程序的设计是存在安全隐患。而这个安全隐患存在的依据在于使用了Object类型,因为Object可以涵盖的范围太广,而如果这种错误可以出现在编译中,那么就可以避免运行时的尴尬,这就是造出泛型的主要原因。
标签:引出,point,void,Object,Point,问题,泛型,public 来源: https://blog.csdn.net/weixin_46245201/article/details/111312129