在讲解什么是泛型之前,我们先观察Java标准库提供的ArrayList,它可以看作“可变长度”的数组,因为用起来比数组更方便。 实际上ArrayList内部就是一个Object数组,配合存储一个当前分配的长度,就可以充当“可变数组”: public class ArrayList { private Object array; private int size; public void a
使用ArrayList时,如果不定义泛型类型时,泛型类型实际上就是Object: // 编译器警告: List list = new ArrayList(); list.add("Hello"); list.add("World"); String first = (String) list.get(0); String second = (String) list.get(1); 此时,只能把&
编写泛型类比普通类要复杂。通常来说,泛型类一般用在集合类中,例如ArrayList<T>,我们很少需要编写泛型类。 如果我们确实需要编写一个泛型类,那么,应该如何编写它? 可以按照以下步骤来编写一个泛型类。 首先,按照某种类型,例如:String,来编写类: public class Pair { private String first; private String last; p
泛型是一种类似”模板代码“的技术,不同语言的泛型实现方式不一定相同。 Java语言的泛型实现方式是擦拭法(Type Erasure)。 所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的。 例如,我们编写了一个泛型类Pair<T>,这是编译器看到的代码: public class Pair<T> { private T first; private T la
我们前面已经讲到了泛型的继承关系:Pair<Integer>不是Pair<Number>的子类。 假设我们定义了Pair<T>: public class Pair<T> { ... } 然后,我们又针对Pair<Number>类型写了一个静态方法,它接收的参数类型是Pair<Number>: public class Pai