Java利用反射机制实例化对象的时候,需要通过类名来获得Class,例如"android.view.ViewGroup",但是,内部类的类名是比较奇怪的,例如ViewGroup的内部类LayoutParams,在代码中我们可以这样声名ViewGroup.LayoutParams lp = ....,但是实际上这并不是其真正的类名。Java在编译代码时为了区分内部类会将内部类名改为
"ViewGroup$LayoutParams"。所以反射的时候,输入内部类类名要注意这一点。
附上反射实例化类的简单方法。没有做排错处理。
/** * * @param className: 完整类名 * @param argTypes: 构造函数的参数类型 * @param args: 构造函数值 * @return 实例化对象 */ static Object reflectInstance(String className, Class[] argTypes, Object[] args) { try { Class viewClass = Class.forName(className); Constructor con = viewClass.getConstructor(argTypes); return con.newInstance(args); } catch (Exception e1) { e1.printStackTrace(); }
return null;
}