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
;
|
}
|