大数据编程入门Java泛型
在Java集合中的元素通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要作显示的强制类转换,对于强制类型转换错误的情况下,编译器可能不提示错误,在运行时才显示异常,这一个不小的隐患,这时候就需要泛型的应用,今天小编将为大家带来大数据编程入门:Java泛型这篇文章介绍Java中的泛型。
一、Java泛型概念
Java泛型是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,允许程序员在编译时检测非法类型。
泛型的本质是参数化类型,即操作的数据类型被指定为参数。
假设设置这么一个问题:如何编写一个排序方法来对整数数组、字符串数组甚至任何其他类型的数组进行排序?
答案为可以使用Java泛型。
使用Java泛型的概念,我们可以编写一个泛型方法来对对象数组进行排序。然后,调用泛型方法对整数数组、浮点数组、字符串数组等进行排序。
二、泛型方法
可以编写一个泛型方法,在调用时可以接收不同类型的参数。编译器根据传递给泛型方法的参数类型适当地处理每个方法调用。
以下是定义泛型方法的规则:所有泛型方法声明都有一个类型参数声明部分(用尖括号分隔),位于方法返回类型之前(在下面的示例的中)。每个类型参数声明部分包含一个或多个由逗号分隔的类型参数。泛型参数(也称为类型变量)是用于指定泛型类型名称的标识符。类型参数可用于声明返回值类型,并可用作通过泛型方法获得的实际参数类型的占位符。泛型方法体的声明与其他方法相同。请注意,类型参数只能表示引用类型,而不能表示原始类型(如int、double、char等)。
以下示例演示如何使用常规方法打印不同类型的数组元素:
运行结果:
有界的类型参数:
有时,可能希望限制允许传递给类型参数的类型范围。例如,对数字进行操作的方法可能只希望接受Number或Number子类的实例。这就是有界类型参数的用途。
要声明有界类型参数,首先列出类型参数的名称,然后是extends关键字,最后是它的上界。
下面的示例演示如何在"extends"(类)或"implement"(接口)的一般意义上使用"extends"。本例中的泛型方法返回三个可比较对象的最大值。
运行结果:
三、泛型类
泛型类的声明与非泛型类的声明类似,只是类型参数声明部分添加在类名之后。
与泛型方法一样,泛型类的类型参数声明部分也包含一个或多个由逗号分隔的类型参数。泛型参数(也称为类型变量)是用于指定泛型类型名称的标识符。因为它们接受一个或多个参数,所以这些类称为参数化类或参数化类型。
以下示例演示如何定义泛型类:
运行结果:
四、类型通配符
1、是否通常使用类型通配符?而不是特定的类型参数。例如,List<?>从逻辑上讲,它是所有List<具体类型实参>的父类,例如List、List。
运行结果:
2、通配符类型的上限由列表等表单定义,此定义是通配符泛型值接受Number及其较低的子类类型。
运行结果:
解析:在(//1)处会发生错误,因为getUperNumber()方法中的参数已将参数泛型的上限限制为Number,所以String的泛型不在此范围内,因此会报告错误。
3、类型通配符的下限是通过诸如List<?Super Number>表示该类型只能接受Number及其三层父类型,例如Object类型的实例。
以上就是关于大数据编程入门:Java泛型的全部内容了,希望这篇文章可以帮助到大家~