上海做網(wǎng)站 公司排名視頻號排名優(yōu)化帝搜軟件
????????前幾天遇到一個問題,部分業(yè)務(wù)一直報錯java.lang.NoSuchMethodException,可是其它業(yè)務(wù)都是正常的啊,為什么呢?
? ? ? ? 經(jīng)過排查,獲取類使用的方法是getDeclaredMethod,該方法不能獲取繼承類的方法,改成getMethod后問題解決了。順便整理一下兩者的區(qū)別,給自己加深下印象。
????????
核心區(qū)別對比
特性 | getMethod | getDeclaredMethod |
---|---|---|
訪問權(quán)限 | 僅公有方法 | 所有訪問權(quán)限(公有、私有、受保護(hù)等) |
是否包含繼承方法 | 是 | 否 |
典型應(yīng)用場景 | 調(diào)用公有 API 方法 | 反射調(diào)用私有 / 受保護(hù)方法(需配合setAccessible(true) ) |
????????簡單的說就是getMethod獲取的是公有方法,包含繼承;getDeclaredMethod獲取的是該類的所有方法,包含私有方法;但使用私有方法時,需要配合setAccessible(true),不然也會出現(xiàn)
java.lang.NoSuchMethodException的報錯。