1. 程式人生 > 其它 >Java 使用反射機制獲取內部類的方法

Java 使用反射機制獲取內部類的方法

技術標籤: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異常。