Java 使用反射机制获取内部类的方法
类的定义如下
public class Parcle{
public int a=10;
class Inner{
public void get(){
System.out.println("innerClass");
}
}
}
1.使用反射获取普通类的方法以及成员。
try{
Class parcleClass=Class.forName("src.Parcle");
Constructor con=parcleClass.getConstructor();
Object obj=con.newInstance();
Field f=parcleClass.getField("a");
}catch(Exception e){
e.printStackTrace();
}
2.使用反射获取内部类方法:
try{
Class parcleClass=Class.forName("src.Parcle");
Constructor con=parcleClass.getConstructor();
Object obj=con.newInstance();
Class inner=Class.forName("src.Parcle$Inner");
Constructor innerCon=inner.getDeclaredConstructor(parcleClass);
Object innerClass=innerCon.newInstance(obj);
Method m=inner.getMethod("get");
m.invoke(innerClass);
}catch(Exception e){
e.printStackTrace();
}
由于内部类隐含的持有一个外部类的引用,所以在使用反射获取内部类构造方法的时候。需要在参数中加入外部类的Class对象。如果不添加,则会报NoSuchMethodException异常,找不到这个构造方法。在使用内部类构造器的时候,需要传入一个外部类的对象。如果不添加此参数,则会报IllegalArgumentException异常。
