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-深海呐"
}
}