Java 泛型(generics)是JDK 5中引入的新特性,提供了编译时类型安全检测机制,该机制将在编译时对一些非法的类型进行检测。
那么,为什么Java要引入泛型呢?泛型能解决什么问题呢?
设想一下,如果需要编写一个排序方法,该方法要能实现对整型数组、浮点数数组、字符串数组甚至其他任何类型的数组进行排序,这应该如何实现?能不能编写一个适用于所有类型的排序方法来实现对任意对象的排序?
看看以下代码:
如上述代码,采用了Object类型来表示任意类型,其中sort()方法可以实现对任意类型的数组进行排序,但这种实现方式存在以下缺点:
1.需要强制类型转换
如果使用上述方法对一个String类型的数组进行排序,那么在向数组中添加元素和获取元素时需要强制类型转换,如:(www.daowen.com)
因为get()方法返回的是一个Object类型的数据,因此必须将结果强制转型为String。很明显,在处理数据的过程中将无法避免地出现很多强制类型转换。
2.使用过程中易出现错误
由于给定的数组是Object类型的数组,那么这个数组就可以存储任意类型的数据。因此,在使用过程中将无法避免类型错误的问题,编译器将无法判断存储的数据是否符合要求,如:
上述代码中,向数组list中存入了一个整型数据,然而在后续操作的时候误认为是一个字符串数据,那么就会发生java.lang.ClassCastException异常。
通过上面的示例,我们不难发现采用Object类型的数组虽然能够存储任意类型的数据,但是在使用过程中会存在诸多问题。如果我们分别针对不同的类型编写排序方法,这虽然能解决强制类型转换的问题,但对String类型的数据进行排序就需要一个SortString,对Integer类型的数据进行排序就需要一个SortInteger,实际上可能还需要为其他所有class单独编写排序方法:SortLong、SortDouble、SortPerson……。很明显,这是不可能的,JDK中的class就有上千个,而且这还不包括开发人员自定义的class。
为了解决此问题,Java的泛型就出现了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。