其他分享
首页 > 其他分享> > 泛型问题引出

泛型问题引出

作者:互联网

泛型是从JDK之后追加到Java语言里面的,其主要目的是解决ClassCastExceootion的问题,在进行对象的向下转型时永远都可能存在安全隐患,而Java希望通过泛型可以慢慢解决此类问题。

泛型问题引出

现在假设定义一个描述x与y坐标的处理类,并且在这个类之中允许开发者保存三类数据。

于是在设计Point类的时候就需要去考虑具体的x和y属性的类型,这个类型要求可以保存以上三种数据。可以用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