原文是:
c11:SpringDetector.java
public class SpringDetector {
  private static Test monitor = new Test();
 
  public static void
  detectSpring(Class groundHogClass) throws Exception {
    Constructor ghog = groundHogClass.getConstructor(
      new Class[] {int.class});

    Map map = new HashMap();
    for(int i = 0; i < 10; i++)
      map.put(ghog.newInstance(
        new Object[]{ new Integer(i) }), new Prediction());
    System.out.println("map = " + map + "\n");
    Groundhog gh = (Groundhog)
      ghog.newInstance(new Object[]{ new Integer(3) });

    System.out.println("Looking up prediction for " + gh);
    if(map.containsKey(gh))
      System.out.println((Prediction)map.get(gh));
    else
      System.out.println("Key not found: " + gh);
  }
  public static void main(String[] args) throws Exception {
    detectSpring(Groundhog.class);
    monitor.expect(new String[] {
      "%% map = \\{(Groundhog #\\d=" +
      "(Early Spring!|Six more weeks of Winter!)" +
      "(, )?){10}\\}",
      "",
      "Looking up prediction for Groundhog #3",
      "Key not found: Groundhog #3"
    });
    }
} ///:~
其中的 Constructor ghog = groundHogClass.getConstructor(
      new Class[] {int.class});看不懂了...
      Groundhog gh = (Groundhog)
      ghog.newInstance(new Object[]{ new Integer(3) });改成
Groundhog gh = (Groundhog)
      ghog.newInstance(new Integer(3));后运行结果一样?不是更简单吗?

解决方案 »

  1.   

    newInstance(new Object[]{ new Integer(3) });这个函数接受的是一个数组参数
    newInstance(new Integer(3));这个的参数不是数组吧
      

  2.   

    newInstance
    public T newInstance(Object... initargs)
                  throws InstantiationException,
                         IllegalAccessException,
                         IllegalArgumentException,
    参数:
    initargs - 将作为变量传递给构造方法调用的对象数组;基本类型的值被包装在适当类型的包装器对象(如 Float 中的 float)中。 
    仔细看Object... initargs,可以看出来了么?
      

  3.   

    Java反射机制,看看我的这篇blog吧,比较基本,也很详细: JAVA反射机制