天天看點

Java 反射擷取私有屬性和方法                         Java 反射擷取私有屬性和方法

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


    }

}