泛型
泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型标记符
E - Element(在集合中使用,因为集合中存放的元素)
T - Type(java类)
K - Key(建)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型
泛型方法
可以写一个泛型方法,该方法在调用时,可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器是当地处理每一个方法的调用。
定义方法的规则:
所有泛型方法声明都有一个类型参数声明部分(由尖括号分割),该类型参数声明部分在方法返回类型之前
每一个类型参数声明部分包含一个或多个参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的表示符号
类型参数能被用来声明返回值类型,并且能作为泛型方法得到实际参数类型的占位符
泛型方法体的声明和其他方法一样,注意类型参数只能代表引用类型,不能是原始类型(像int、double、char等)
public class MaximumTest
{
// 比较三个值并返回最大值
public static <T extends Comparable<T>> T maximum(T x, T y, T z)
{
T max = x; // 假设x是初始最大值
if ( y.compareTo( max ) > 0 ){
max = y; //y 更大
}
if ( z.compareTo( max ) > 0 ){
max = z; // 现在 z 更大
}
return max; // 返回最大对象
}
public static void main( String args[] )
{
System.out.printf( "%d, %d 和 %d 中最大的数为 %d\n\n",
3, 4, 5, maximum( 3, 4, 5 ) );
System.out.printf( "%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n",
6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );
System.out.printf( "%s, %s 和 %s 中最大的数为 %s\n","pear",
"apple", "orange", maximum( "pear", "apple", "orange" ) );
}
}泛型类
泛型类的声明在类名后面添加了类型参数声明。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。