泛型还提供编译时类型安全,它允许程序员在编译时捕获无效的类型。
使用Java泛型的概念,我们可以编写一个通用的方法进行排序对象的数组,然后用整型数组,数组双,字符串数组等调用泛型方法,对数组元素进行排序。
泛型方法:
可以调用不同类型的参数一个通用的方法声明。基于传递给泛型方法的参数的类型,编译器适当地处理每个方法调用。以下是定义泛型方法的规则:
-
所有泛型方法的声明有一个类型参数部分由尖括号分隔(<and>)之前的方法的返回类型(<E>下一个例子)。
-
每个类型参数部分包含用逗号分隔的一个或多个类型参数。 一个类型参数,也称为类型变量,是一个标识符,用于指定一个泛型类型的名称。
-
类型参数可以用来声明的返回类型和充当占位符传递给泛型方法,它被称为实际类型参数的参数的类型。
-
泛型方法的身体就像是任何其他方法的声明。需要注意的是类型参数只能表示引用类型,而不是原始类型(如int,double和char)。
例子:
下面的例子演示了如何我们可以使用一个通用的方法,打印不同类型的数组:
public class GenericMethodTest { // generic method printArray public static < E > void printArray( E[] inputArray ) { // Display array elements for ( E element : inputArray ){ System.out.printf( "%s ", element ); } System.out.println(); } public static void main( String args[] ) { // Create arrays of Integer, Double and Character Integer[] intArray = { 1, 2, 3, 4, 5 }; Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "Array integerArray contains:" ); printArray( intArray ); // pass an Integer array System.out.println( " Array doubleArray contains:" ); printArray( doubleArray ); // pass a Double array System.out.println( " Array characterArray contains:" ); printArray( charArray ); // pass a Character array } }
这将产生以下结果:
Array integerArray contains: 1 2 3 4 5 6 Array doubleArray contains: 1.1 2.2 3.3 4.4 Array characterArray contains: H E L L O
限制类型参数:
有可能有时候,会希望限制该种被允许被传递到一个类型参数的类型。例如,运行在数字的方法可能只希望接受数或其子类的实例。这就是界定类型参数。
声明一个界定类型参数,列出类型参数的名称,后面是extends关键字,其次是它的上限。
例子:
下面的例子演示了如何扩展是用在一般意义上是指无论是“扩展”(如类)或“工具”(如接口)。这个例子是通用方法返回最大的三个比较对象:
public class MaximumTest { // determines the largest of three Comparable objects public static < T extends Comparable < T >> T maximum ( T x , T y , T z ) { T max = x ; // assume x is initially the largest if ( y . compareTo ( max ) > 0 ){ max = y ; // y is the largest so far } if ( z . compareTo ( max ) > 0 ){ max = z ; // z is the largest now } return max ; // returns the largest object } public static void main ( String args [] ) { System . out . printf ( "Max of %d, %d and %d is %d" , 3 , 4 , 5 , maximum ( 3 , 4 , 5 ) ); System . out . printf ( "Maxm of %.1f,%.1f and %.1f is %.1f" , 6.6 , 8.8 , 7.7 , maximum ( 6.6 , 8.8 , 7.7 ) ); System . out . printf ( "Max of %s, %s and %s is %s" , "pear" , "apple" , "orange" , maximum ( "pear" , "apple" , "orange" ) ); } }这将产生以下结果:
Integer Value :10 String Value :Hello World