java Class类反射getDeclaredMethod() 和 getMethod()的区别
前几天遇到一个问题,部分业务一直报错java.lang.NoSuchMethodException,可是其它业务都是正常的啊,为什么呢?
经过排查,获取类使用的方法是getDeclaredMethod,该方法不能获取继承类的方法,改成getMethod后问题解决了。顺便整理一下两者的区别,给自己加深下印象。
核心区别对比
特性 | getMethod | getDeclaredMethod |
---|---|---|
访问权限 | 仅公有方法 | 所有访问权限(公有、私有、受保护等) |
是否包含继承方法 | 是 | 否 |
典型应用场景 | 调用公有 API 方法 | 反射调用私有 / 受保护方法(需配合setAccessible(true) ) |
简单的说就是getMethod获取的是公有方法,包含继承;getDeclaredMethod获取的是该类的所有方法,包含私有方法;但使用私有方法时,需要配合setAccessible(true),不然也会出现
java.lang.NoSuchMethodException的报错。