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

泛型

2016-05-31 00:00 411 查看
摘要: 泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。

泛型的好处

类型安全。
泛型的主要目标是提高 Java 程序的类型安全

消除强制类型转换
这使得代码更加可读,并且减少了出错机会

泛型不是协变的

List<Object>不是List<String>的父类型
数组是协变的

//如果 A 扩展 B,那么 A 的数组也是 B 的数组,并且完全可以在需要B[]的地方使用A[]:
Integer[] intArray = new Integer[10];
Number[] numberArray = intArray;

//对于泛型来说,下面的代码是无效的
List<Integer> intList = new ArrayList<Integer>();
List<Number> numberList = intList; // invalid

泛型中的类型通配符

List<?>是任何泛型List的父类型
加入你有以下代码:

List<Integer> list = new List<Integer>();
printList(list);//×:编译error

void printList(List<Object> l) {
for (Object o : l) {
System.out.println(o);
}
}

编译失败,因为List<Integer>不是一个List<Object>(非协变的)
解决方案就是使用通配符

List<Integer> list = new List<Integer>();
printList(list);//×:编译error

void printList(List<?> l) {
for (Object o : l) {
System.out.println(o);
}
}

泛型方法

泛型类在多个方法签名间实施类型约束
在List<V>中,类型参数V出现在get()、add()、contains()等方法的签名中。即:方法的返回值肯定是V类型的。

public static < K1 extends Serializable, V1 extends Encodable < K1 >> Decoder < K1, V1 > create( V1[] values ) {
return new Decoder < K1, V1 >( values );
}


为什么您选择使用泛型方法

*当泛型方法是静态的时,这种情况下不能使用类类型参数
*

泛型类

public class Matrix<V extends Number> { ... }

编译器允许您创建Matrix<Integer>或Matrix<Float>类型的变量,
但是如果您试图定义 Matrix<String>类型的变量,则会出现错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 泛型