Java 反射擷取私有屬性和方法
馬上過年了,深海祝看到這篇部落格的碼農朋友新年快樂!
今天下午公司沒什麼事情,是以寫了點小東西,算是給各位的新年小禮物...
/*
*作者:趙星海 (CSDN-深海呐)
*時間:2019/1/31 17:17
*用途:反射私有屬性方法Demo
*/
public class Test {
private String textData = "原始資料";
private String getData() {
return textData;
}
Test() throws Exception {
Class<Test> MyClass = Test.class;// 擷取class對象
Test text = MyClass.newInstance(); // 擷取建立對象
Field[] fs = MyClass.getDeclaredFields();// 擷取所有屬性
for (int i = 0; i < fs.length; i++) {
fs[i].setAccessible(true);// 将目标屬性設定為可以通路
fs[i].set(text, "CSDN-深海呐");//将屬性值重新指派
}
Method[] ms = MyClass.getDeclaredMethods();// 擷取擷取class對象所有的方法
for (int i = 0; i < ms.length; i++) {
ms[i].setAccessible(true);// 将目标屬性設定為可以通路
// 用Eclipse的後端小夥伴請使用System.out.println()列印結果
Log.e("反射得到的第"+i+"個方法", ms[i].getName());
}
Method m = MyClass.getDeclaredMethod("getData");
m.setAccessible(true);
// 用Eclipse的後端小夥伴請使用System.out.println()列印結果
Log.e("方法傳回值: ", "" +(ms[0]==null?"":m.invoke(text))); // 正确輸出結果 "CSDN-深海呐"
}
}