class="java">package com.zl.invoke; import java.lang.reflect.Constructor; public class A { public A() { } public A(String str) { } class Inner { private String name = "Inner"; public Inner() { } public Inner(String na) { name = na; } } public static void main(String args[]) { Object obj = getObject("com.zl.invoke.A"); System.out.println("obj: " + obj.toString()); Object innerObj = getObjectFromInnerClass("com.zl.invoke.A$Inner"); System.out.println("innerObj : " + innerObj.toString()); } public static Object getObject(String className) { Object obj = null; try { Class c = Class.forName(className); if (c != null) { Constructor constructor = c .getDeclaredConstructor(new Class[] { String.class }); if (constructor != null) { obj = constructor.newInstance("dlafjdf"); } } } catch (Exception e) { e.printStackTrace(); } return obj; } public static Object getObjectFromInnerClass(String clsName) { Object obj = null; try { Class c = Class.forName(clsName); if (c != null) { Constructor constructor = c.getDeclaredConstructor(new Class[] { A.class, String.class }); if (constructor != null) { obj = constructor.newInstance(new A(), "dlafjdf"); } } } catch (Exception e) { e.printStackTrace(); } return obj; } }
?
关键代码用红色字体标注:
? 获取内部类构造方法时,需要将其外部类的类对象作为参数传进去
Constructor constructor = c.getDeclaredConstructor(new Class[] {
A.class, String.class });
同样实例化内部类时,也需要将外部类对象作为参数传进去
obj = constructor.newInstance(new A(), "dlafjdf");