您的位置:首页 > 编程语言 > Java开发

Java泛型

2015-10-31 15:57 393 查看
泛型还提供编译时类型安全,它允许程序员在编译时捕获无效的类型。

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息