Java 使用反射機制獲取內部類的方法
阿新 • • 發佈:2020-12-26
類的定義如下
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異常。