- java的参数化类型被称为泛型(generics)。平时见到最多的泛型应用是在各个集合中,比如ArrayList、HashMap中。
- c++的泛型使用的是膨胀法,就是生成多个实现类。而java使用的是擦除法,就是将对象存入时都擦除为Object类型,但是在取出时再根据相应类型进行一次类型转换。
下面以ArrayList的源码为例说法擦除法:
transient Object[] elementData; //存入时将E类型转换为Object存储 public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e; return true; } //取出时再将Object强转为相应的E类型 public E get(int index) { rangeCheck(index); return elementData(index); } E elementData(int index) { return (E) elementData[index]; }