Generics 是JDK 1.5 一个最重要的特性,主要用来处理Collection。 
  以下代码在JDK 1.5 调试通过。 
  代码实例1: Demo.java 
  package maoxiang.examples.jdk15.generics; 
  import java.util.ArrayList; 
  import java.util.Collection; 
  import java.util.HashMap; 
  import java.util.LinkedList; 
  import java.util.List; 
  import java.util.Map; 
  /** 
  * @author 毛翔 
  * 
  * 演示如何使用Generics 特性。代码来自于 Generics 教程: 
  *  
  * 
  * Generics类似于C++中的模板。 
  * 区别: 
  * 1. 
  * 2. 
  */ 
  public class Demo { 
  public static void main(String[] args) {} 
  /** 
  * 最简单的用法 
  */ 
  public void Test1() { 
  // 以前的用法 
  //List myIntList = new LinkedList(); // 1 
  //myIntList.add(new Integer(0)); // 2 
  //Integer x = (Integer) myIntList.iterator().next(); // 3 需要强制转换 
  // 1.5 的用法 
  List myIntList = new LinkedList(); // 1' 
  myIntList.add(new Integer(0)); //2' 
  Integer x = myIntList.iterator().next(); // 3' 
  } 
  /** 
  * 匿名字符的用法 
  */ 
  public void Test2() { 
  List list = new ArrayList(); 
  //通过匿名字符打印一个集合 
  Wildcards(list); 
  Wildcards1(); 
  /* 
  * 如果 Wildcards2 定义为Wildcards2(List shapes) 
  * 以下调用错误 
  */ 
  Wildcards2(list); 
  } 
  public void Wildcards(Collection< ? > c) { 
  // 以前的用法 
  //Iterator i = c.iterator(); 
  //for (int k = 0; k < c.size(); k++) { 
  // 
  log(i.next()); 
   //} 
  //1.5 的用法 
  //Collection c 表示 
  for (Object e : c) { 
  log(e); 
  } 
  } 
  public void Wildcards1() { 
  //Collection c = new ArrayList(); 
  //c.add(new Object()); // compile time error 
  //以上为错误的用法,因为不能确定 c 的类型 ,不能使用add ,但get可以 。正确的用法如下: 
  ArrayList c = new ArrayList(); 
  c.add("test"); 
  List< ? > list = c; 
  log(c.get(0)); 
  } 
  public void Wildcards2(List< ? extends Shape> shapes) { 
  //List shapes 定义只能接受List shapes,也不能接受 List 
  for (Shape s : shapes) { 
  s.draw(); 
  } 
  //以下写法错误,因为为参数申明为 extends Shpape,无法确定Rectangle 为Shape子类,属于不安全调用 
  //shapes.add(0, new Rectangle()); 
  Map allDrivers = new HashMap(); 
  Census.addRegistry(allDrivers); 
  //以下写法允许,因为drivers明确定义, 
  List drivers = new ArrayList(); 
  Census.add(drivers); 
  } 
  /** 
  * Generic Methods 的用法 
  * 
  */ 
  public void Test3() { 
  //适用于各种类型的函数 
  Object[] oa = new Object[100]; 
  Collection
