通過反射獲取私有內部類物件
首先是我們的目標物件:
class Out {
//目標獲取Inner物件
private class Inner {
//內部類的私有成員屬性
private String inner = "ccc";
}
}
直接列出程式碼:
public class Main {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) throws Exception {
//獲取外部類
Class clzz = Out.class;
//獲取外部類預設無參構造方法
Constructor con = clzz.getDeclaredConstructor();
//例項一個外部類物件
Out outObj = (Out) con.newInstance();
//獲取外部類內的所有內部類
Class innerClazz[] = clzz.getDeclaredClasses();
//遍歷
for (Class c : innerClazz) {
//獲取修飾符的整數編碼
int mod = c.getModifiers();
//返回整數編碼對應的修飾符的字串物件
String modifier = Modifier.toString(mod);
//找到被private修飾的內部類
if (modifier.contains("private")) {
//根據內部類的特性,需要由外部類來反射獲取內部類的構造方法(這裡獲取的是內部類的預設構造方法)
Constructor cc = c.getDeclaredConstructor(clzz);
//由於內部類是私有的,需要強制獲取構造方法的訪問許可權
cc.setAccessible(true);
//由外部類物件來反射獲取內部類的物件
Object obj=cc.newInstance(outObj);
//獲取內部類的私有成員屬性inner
Field f=c.getDeclaredField("inner");
//獲取訪問許可權
f.setAccessible(true);
//獲取內部類物件obj中的私有成員屬性inner的值
System.out.println(f.get(obj));
}
}
}
}
輸出結果:
ccc
相關文章
- 反射獲取注入到spring中的類物件的工具類反射Spring物件
- org.reflections 介面通過反射獲取實現類原始碼研究反射原始碼
- Unity通過子物件獲取父物件例子Unity物件
- JavaScript 通過class獲取元素物件JavaScript物件
- Grails通過sessionId獲取session物件AISession物件
- 反射--Class物件功能--獲取Method反射物件
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- PHP --反射 --獲取類的方法PHP反射
- [bug]spring專案通過反射測試私有方法時,注入物件異常Spring反射物件
- android通過MediaProjection獲取螢幕內容AndroidProject
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- 物件導向之內部類物件
- 建立獲取Springbean物件工具類SpringBean物件
- 通過反射獲取上傳檔案方法引數中的檔名反射
- JAVA之反射學習1-如何獲取Class物件Java反射物件
- 通過用shellcode獲取shell
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- Java之區域性匿名內部類物件Java物件
- Java知識點總結(反射-獲取類的資訊)Java反射
- 內部類與靜態內部類
- 物件獲取原型物件物件原型
- 通過類名動態生成物件物件
- PHP 物件導向 (十一)反射類PHP物件反射
- JAVA物件導向基礎--N種內部類Java物件
- Java內部類詳解--匿名內部類Java
- iOS 通過runtime獲取某個類中所有的變數和方法iOS變數
- 揭秘Java反射:如何輕鬆獲取類的屬性及父類屬性Java反射
- 內部類
- Java內部類詳解-- 成員內部類Java
- java內部類,為什麼需要內部類?Java
- 簡單介紹如何通過註解獲取反射的值反射
- JavaScript內部物件和Date物件JavaScript物件
- 如何通過WinDbg獲取方法引數值
- 通過web url獲取檔案資訊Web
- Android 通過名稱獲取資源IDAndroid
- Java內部類詳解--區域性內部類Java
- Java內部類Java