Java Reflection只获取子类的方法(没有equals,hashcode等)

时间:2017-05-03 08:41:51

标签: java reflection

有没有办法获取Class对象的方法,而无法获取Object类定义的方法?

现在我正在使用getDeclaredMethods()来查找带有参数列表的特定方法。

我的问题是,这也会返回像 "等于"," hashCode"等... 因此,这些功能与我正在寻找的功能之间可能不明确。

查看文档,它说它只返回由此类定义的公共方法(或者在我的情况下是一个接口),并且我的对象永远不会覆盖这些方法

有没有解决方法呢?

示例:

class Test implements ITest {
   void myMethod() {...}
}

在我的代码中我有类似

的内容
Object o = new Test();
for (Method m : o.getClass().getDeclaredMethods()) { 
    System.out.println(m.getName()...);
}

这将打印出Object类

中定义的方法

1 个答案:

答案 0 :(得分:2)

getMethods()返回类声明的所有方法,以及在对象类中声明的方法。您可以使用getDeclaredMethods()来访问特定于类或从超类实现的方法。例如:

  interface IChild {
     int child1(int a, int b);
  }
    static class ChildImpl implements IChild {
        @Override
        public int child1(int a, int b) {
            return a*b;
        }
        public int child2(int x, int y){
            return  x+x*y;
        }
    }

    public static void main(String[] args) {
        IChild i=new ChildImpl();
        System.out.println("===Non Object Methods===");
        for(Method m:i.getClass().getDeclaredMethods()){
            System.out.println("Declared Method"+m.getName());
        }
        System.out.println("===All Methods===");
        for(Method m:i.getClass().getMethods()){
            System.out.println("Method: "+m.getName());
        }
    }
}

示例输出:

===非对象方法===

声明的方法:child2

声明的方法:child1

===所有方法=== 方法:child2

方法:child1

方法:等待

方法:等待

方法:等待

方法:等于

方法:toString

方法:hashCode

方法:getClass

方法:通知

方法:notifyAll