本篇文章主要介绍了"Java基础系列:(1)关于泛型的简单总结",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
一 为什么要引入泛型这个概念? 这里我用一个实例来简单说明。比如说:我们要设计一个表示二维坐标的类,但是因为关于坐标的表示有多种形式,比如: ...
一 为什么要引入泛型这个概念?
这里我用一个实例来简单说明。比如说:我们要设计一个表示二维坐标的类,但是因为关于坐标的表示有多种形式,比如:
(1)整数表示:x=10 y=20
(2)浮点型表示:x=10.5 y=20.8
(3)字符串表示:x=””东经 50度”” y=”北纬 79度”
因此,在我们设计的类中就不能单一的设置成int,float或String,而想要使用一个类型来接收这三种不同的数据类型,就只能使用Object。测试代码如下:
package javase.paradigm;
/**
* 二维坐标表示
* */
public class Point {
private Object X;
private Object Y;
public Object getX() {
return X;
}
public void setX(Object x) {
X = x;
}
public Object getY() {
return Y;
}
public void setY(Object y) {
Y = y;
}
public static void main(String[] args) {
Point point = new Point();
//1 整数表示坐标
point.setX(10); //int --> Integer --> Object
point.setY(20);
int x = (int) point.getX();
int y = (int) point.getY();
System.out.println("整数表示,X坐标是:" + x + ",Y坐标是:" + y);
System.out.println("******************我是华丽的分割线**********************");
//2 小数表示坐标
point.setX(10.5f); //float --> Float --> Object
point.setY(20.8f);
float x2 = (float) point.getX();
float y2 = (float) point.getY();
System.out.println("小数表示,X坐标是:" + x2 + ",Y坐标是:" + y2);
System.out.println("******************我是华丽的分割线**********************");
//3 字符串表示坐标
point.setX("东经 50度"); //String --> Object
point.setY("北纬 79度");
String x3 = (String) point.getX();
String y3 = (String) point.getY();
System.out.println("字符串表示,X坐标是:" + x3 + ",Y坐标是:" + y3);
}
}
输出:
整数表示,X坐标是:10,Y坐标是:20
******************我是华丽的分割线**********************
小数表示,X坐标是:10.5,Y坐标是:20.8
******************我是华丽的分割线**********************
字符串表示,X坐标是:东经 50度,Y坐标是:北纬 79度
通过上面设计的这个类貌似已经解决我们的需求了?但是真的是这样吗?这个类中将变量设置成Object类型,就意味着可以使用任意的Object子类来初始化,如果对变量初始化的类型和取出类型不一致,则程序在运行时会报错,出现类型转化异常。比如说这样:
point.setX(0);
point.setY("北纬179度");
int x4 = (int) point.getX();
int y4 = (int) point.getY(); //错误代码
System.out.println("错误案例,X坐标是:" + x4 + ",Y坐标是:" + y4);
这段代码编译没有问题,但是运行时报错,报错信息如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at javase.paradigm.Point.main(Point.java:60)
错误信息已经很明显了,String类型不能转化成Integer类型。因此为了避免出现这种类型安全问题,我们就需要使用泛型
二 泛型的初步使用
(1)格式:
类名称<具体类> 对象名称 = new 类名称<具体类>()具体类>具体类>
如:Point2 point2_1 = new Point2();
(2)完整测试案例代码如下: