通過反射獲取私有內部類物件
首先是我們的目標物件:
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
相關文章
- 通過反射獲取類的類名,方法和內部成員變數反射變數
- 反射-通過反射獲取私有構造方法並使用反射構造方法
- 通過反射獲取窗體例項反射
- 通過Java反射動態獲取資訊Java反射
- Java反射獲取類和物件資訊全解析Java反射物件
- 反射-通過反射獲取成員變數並使用反射變數
- org.reflections 介面通過反射獲取實現類原始碼研究反射原始碼
- 反射-通過反射獲取無參構造方法並使用反射構造方法
- 反射-通過反射獲取帶參構造方法並使用反射構造方法
- JavaScript 通過class獲取元素物件JavaScript物件
- Unity通過子物件獲取父物件例子Unity物件
- 反射獲取注入到spring中的類物件的工具類反射Spring物件
- 反射--Class物件功能--獲取Method反射物件
- Grails通過sessionId獲取session物件AISession物件
- .net中通過反射得到所有的私有欄位(包括父類)反射
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- Java——通過反射獲取函式引數名稱Java反射函式
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- PHP --反射 --獲取類的方法PHP反射
- 小談java內部類物件的生成過程Java物件
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- [bug]spring專案通過反射測試私有方法時,注入物件異常Spring反射物件
- 反射-通過反射執行配置檔案內容反射
- 物件導向之內部類物件
- android通過MediaProjection獲取螢幕內容AndroidProject
- 通過PowerShell獲取TCP響應(類Telnet)TCP
- 通過NameValuePairsValueProvider物件來獲取指定字首的KeyAIIDE物件
- 通過JavaScript獲取標籤,修改標籤內容JavaScript
- 通過反射獲取上傳檔案方法引數中的檔名反射
- 反射-獲取class檔案物件的三種方式反射物件
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- Swift通過類名建立物件Swift物件
- java之內部類(InnerClass)----非靜態內部類、靜態內部類、區域性內部類、匿名內部類Java
- JAVA之反射學習1-如何獲取Class物件Java反射物件
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- 通過EPROCESS獲取程式名
- java內部類之成員內部類之匿名內部類Java
- Java知識點總結(反射-獲取類的資訊)Java反射