转载:https://www.dazhuanlan.com/2020/03/14/5e6c39378e762/
getDeclaredMethods方法的注释:
Returns an array containing Method objects reflecting all the declared methods of the class or interface represented by this Class object, including public, protected, default (package) access, and private methods, but excluding inherited methods.
谷歌翻译:
返回一个包含 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有声明方法,包括 public,protected,default(包)访问和私有方法,但不包括继承的方法。
Java的getDeclaredMethods不能获取到父类的方法的案例:
public class TT{
class A {
void add(Object obj) {
}
}
class B extends A{
@Override
void add(Object obj) {
}
}
public static void main(String[] args) {
for (Method method : B.class.getDeclaredMethods()) {
System.out.println(method.toString());
}
}
}
结果:
void Test$B.add(java.lang.Object)
Java的getDeclaredMethods能获取到父类的方法的案例:
public class TT{
class A<T> {
void add(T t) {
}
}
class B extends A<String>{
@Override
void add(String obj) {
}
}
public static void main(String[] args) {
for (Method method : B.class.getDeclaredMethods()) {
System.out.println(method.toString());
}
}
}
结果:
void Test$B.add(java.lang.String)
void Test$B.add(java.lang.Object)
解决:
public static void main(String[] args) {
for (Method method : B.class.getDeclaredMethods()) {
if(!method.isBridge()){
System.out.println(method.toString());
}
}
}