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){}
}