JavaSE进阶

12.4 泛型嵌套:由外到内分析

public static void main(String[] args) {

HashMap<String,ArrayList<Citizen>> map = new HashMap<String,ArrayList<Citizen>>();

ArrayList<Citizen> list = new ArrayList<Citizen>();

list.add(new Citizen("刘恺威"));

list.add(new Citizen("杨幂"));

list.add(new Citizen("小糯米"));

map.put("刘恺威", list);

Set<Entry<String, ArrayList<Citizen>>> entrySet = map.entrySet();

Iterator<Entry<String, ArrayList<Citizen>>> iterator = entrySet.iterator();

while(iterator.hasNext()){

Entry<String, ArrayList<Citizen>> next = iterator.next();

String key = next.getKey();

ArrayList<Citizen> value = next.getValue();

System.out.println("户主:"+key);

System.out.println("家庭成员:"+value);

}

}

12.5 泛型的特殊点

1、泛型没有多态

如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口,G<B>并不是G<A>的子类型!

比如:String是Object的子类,但是List<String >并不是List<Object>的子类。

public static void main(String[] args) {

Fruit f = new Apple();//多态

//泛型没有多态

// ArrayList<Fruit> list = new ArrayList<Apple>();//泛型没有多态

ArrayList<? extends Fruit> list = new ArrayList<Apple>();//使用通配符可以

}

2、没有泛型数组

public class TestGenericPolymophism {

public static void main(String[] args) {

//泛型没有数组

// Tiger<String>[] as = new Tiger<String>[];

}

}

class Tiger<T>{

}

ArrayList源代码

public class ArrayList<E>  。。。{

    transient Object[] elementData;

    public boolean add(E e) {

        ensureCapacityInternal(size + 1);  // Increments modCount!!

        elementData[size++] = e;

        return true;

}

    public E get(int index) {

        rangeCheck(index);

        return elementData(index);

}

    E elementData(int index) {

        return (E) elementData[index];

    }

}

3、jdk1.7简化泛型

//jdk1.7,泛型的简化操作

ArrayList<Fruit> flist = new ArrayList<>();

4、不能在try-catch中使用泛型定义

try{

}catch(T t){}

}