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异常。

经验分享 程序员 微信小程序 职场和发展