JAVA中的泛型

来源:互联网 发布:数据恢复 深圳 编辑:程序博客网 时间:2024/06/11 04:08

1 泛型的引出

现在要求定义一个表示 坐标的类(Point),这个类需要能保存数字:x = 10,y =20; 保存小数:x = 10.2 ,y = 20.4;保存字符串: x = 东经20度 , 北纬32度。

这三组数据不同之处就是数据类型不一致,必需要使用一种数据类型能同时保存这三种数据。所以我必须使用Object这种数据类型。

Point类:

测试数字:

测试小数:

测试字条串:

此时的代码已经利用了Object数据类型来解决了开发的问题,但是Object向下转换可能会发生ClassCastException的异常。

从JDK1.5之后添加泛型技术,它的核心意义在于:类在定义的时候,可以使用一个标记,此标记就表示类中的属性或者方法参数的类型标记,在使用的时候才动态设置类型。

修改后的Ponit:

测试:

在使用了泛型之后,类中的所有类型都动态设置的,面所有使用泛型标记的方法参数的类型都发生了改变。但是你使用泛型,只能采用的类型是类,不能使用基本类型,只能使用引用类型。

如果使用泛型类或者是接口时,没有设置泛型的具体类型,那么会出现编译时的警告,同时为了保证程序能正常运行,所有的泛型都相当使用了Object来设置泛型的类型。

JDK1.7后可以写成Point<String> point = new Point<>(),实例化的声明可以省略。

还要注意,一个方法不能使用泛型参数的重载,比如fun(Point <String> point)与fun(Point <Integer> point)不能共存,因为重载认的是参数的类型,与泛型无关,无论泛型是什么,方法的参数类型还是Ponit。正确的写法如下。

除了?号以外还有两种通配符

1 ? extends 类 :设置泛型上限,可以在声明和方法参数止使用;

2 ? super 类 :设置泛型下限 , 方法参数上使用。

原创粉丝点击