Java泛型
2015-10-31 15:57
393 查看
泛型还提供编译时类型安全,它允许程序员在编译时捕获无效的类型。
使用Java泛型的概念,我们可以编写一个通用的方法进行排序对象的数组,然后用整型数组,数组双,字符串数组等调用泛型方法,对数组元素进行排序。
所有泛型方法的声明有一个类型参数部分由尖括号分隔(<and>)之前的方法的返回类型(<E>下一个例子)。
每个类型参数部分包含用逗号分隔的一个或多个类型参数。 一个类型参数,也称为类型变量,是一个标识符,用于指定一个泛型类型的名称。
类型参数可以用来声明的返回类型和充当占位符传递给泛型方法,它被称为实际类型参数的参数的类型。
泛型方法的身体就像是任何其他方法的声明。需要注意的是类型参数只能表示引用类型,而不是原始类型(如int,double和char)。
这将产生以下结果:
声明一个界定类型参数,列出类型参数的名称,后面是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"
)
);
}}
这将产生以下结果:
使用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
相关文章推荐
- 谷歌 Project Zero 团队宣布新政策,漏洞披露前将有完整的 90 天缓冲期
- 在命令行用 sort 进行排序
- 浅谈汇编器、编译器和解释器
- 让我们做个简单的解释器(三)
- 让我们做个简单的解释器(一)
- 用 350 行代码从零开始,将 Lisp 编译成 JavaScript
- Aut2Exe编译au3脚本为可执行文件
- 春节长假安全手册
- 文件遍历排序函数
- 地震避险自救常识
- 路由器安全有关的目录
- 打造个性_安全的电脑系统图文教程2第1/2页
- CentOS 6.3下编译安装Ruby 2.0笔记
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法