如果我们想设计一个表示坐标点的类,坐标由 X 和 Y 组成,那么坐标的表示方法则可以是整型,小数或者字符串。
此时我们需要设计一个表示坐标点的类 Point,这个类中有两个属性表示 X坐标和Y坐标,但是x,y中所保存的数据类型会有三种,而想要使用一个类型同时接收3种类型数据,则只能使用Object,因为Object类可以接收任何类型的数据,都会发生向上转型操作
设计思路:
设计 Point 类:
class Point{
private Object x;//表示 x 坐标
private Object y;//表示 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;
}
}
此时定义 Point 属性时使用了 Object
类型,则输入的数据可以是任意的类型。
public class Test{
public static void main(String[] args) {
Point p = new Point();
p.setX(10);//利用自动装箱操作:int --> Integer --> Object
p.setY("ten");//string --> Object
int x = (Integer)p.getX();//取出数据
int y = (Integer)p.getY();//取出数据,会出现类型转换错误
System.out.println("整数表示,x 坐标为:" + x);
System.out.println("整数表示,y 坐标为:" + y);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
此时程序虽然可以正常的编译成功,但是程序运行时却发生了错误,因为设置的 String 类型无法向 Integer 类型转换,之所以造成这样的问题是因为 Point 类中的属性使用 Object 类型进行接收,造成了类型安全问题,因此需要用到下面的泛型技术。
泛型可以解决数据类型的安全性问题,主要原理是在类声明时通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型
这样在类声明或实例化时只要指定好需要的类型即可。