第8章泛型
这章学不太懂,所以简单记录一下,如果要用到这方面的知识,我再专门来学习一下。
8.1 泛型入门
8.1.2 使用泛型
从Java5以后,Java引用了“参数化类型(parameterized type)”的概念,允许程序在创建集合时指定集合元素的类型,正如在第7章的ShowHand.java程序中见到的List,这表明List只能保存字符串类型的对象。Java的参数化类型被称为泛型。
8.2 深入泛型
可以为任何类、接口增加反省声明(并不是只有集合类才可以使用泛型声明,虽然集合类是泛型的重要使用场所)。下面定义一个Apple类,这个Apple类就可以包含一个泛型声明:
8.3 类型通配符
8.4 泛型方法
泛型方法的语法格式如下:
修饰符<T, S>返回值类型 方法名(形参列表)
{
// 方法体...
}
import java.util.ArrayList;
import java.util.Collection;
public class GenericMethodTest {
// 声明一个泛型方法,该泛型方法中带一个T类型形参
static <T> void fromArrayToCollection(T[] a, Collection<T> c){
for (T o: a){
c.add(o);
}
}
public static void main(String[] args) {
Object[] oa = new Object[100];
Collection<Object> co = new ArrayList<>();
// 下面代码中T代表Object类型
fromArrayToCollection(oa, co);
String[] sa = new String[100];
Collection<String> cs = new ArrayList<>();
// 下面代码中T代表String类型
fromArrayToCollection(sa, cs);
// 下面代码中T带代表Object类型
fromArrayToCollection(sa, co);
Integer[] ia = new Integer[100];
Float[] fa = new Float[100];
Number[] na = new Number[100];
Collection<Number> cn = new ArrayList<>();
// 下面代码中T代表Number类型
fromArrayToCollection(ia, cn);
// 下面代码中T代表Number类型
fromArrayToCollection(fa, cn);
// 下面代码中T代表Number类型
fromArrayToCollection(na, cn);
// 下面代码中T代表Obejct类型
fromArrayToCollection(na, co);
// 下面代码中T代表String类型,但na是要给Number数组
// 因为Number既不是String类型
// 也不是它的子类,所以出现编译错误
// fromArrayToCollection(na, cs);
}
}