Java 反射機制中 getMethod()和getDeclaredField()差別
今天在程式中用到java反射機制時,遇到的問題記錄一下:我當時遇到的問題是,我用反射getMethod()調用類方法時,發生NoSuchMethodException異常,後來上網發現getMethod()調用公共方法,不能反射調用私有方法,後來找到getDeclaredField()能夠通路本類中定義的所有方法。後來用這個方法解決了我遇到的問題。我查了java api文檔,其中詳細說明如下:
Method getDeclaredMethod(String name, Class… parameterTypes)
傳回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法。
Method[] getDeclaredMethods()
傳回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、預設(包)通路和私有方法,但不包括繼承的方法。
Method getMethod(String name, Class… parameterTypes)
傳回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。
Method[] getMethods()
傳回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。
getDeclaredField(String name)
傳回一個 Field 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明字段。
Field[] getDeclaredFields()
傳回 Field 對象的一個數組,這些對象反映此 Class 對象所表示的類或接口所聲明的所有字段,包括公共、保護、預設(包)通路和私有字段,但不包括繼承的字段
反射擷取對象中的變量
<code>A a=</code><code>new</code> <code>A();</code>
<code>Field field=A.</code><code>class</code><code>.getDeclaredField(</code><code>"m"</code><code>);</code><code>//根據變量名m獲得字段</code>
<code>field.setAccessible(</code><code>true</code><code>);</code><code>//設定字段可通路,即暴力反射</code>
<code>String m=(String)field.get(a);</code><code>//在那個對象上擷取此字段的值</code>
<code>System.out.println(m);</code>
本文轉自 一點點征服 部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/5368840.html,如需轉載請自行聯系原作者