在使用反射检查类时,如何避免在Java中继承自Object类的方法?

时间:2014-03-10 21:45:26

标签: java reflection

有没有办法避免从Object类继承的方法。 我有以下代码:

public void testGetMethods() {
    SomeClass sc = new SomeClass();
    Class c = sc.getClass();
    Method [] methods = c.getMethods();

    for (Method method : methods) {
        System.out.println(method.getName());
    }
}

一切都没问题,但它也返回Object类中的方法,如hashCode,getClass,notify,equals等。类SomeClass应该有两个自己的方法,分别是m1和m2。

我只想打印这些方法(m1,m2)。有什么方法可以实现这个目标吗?

2 个答案:

答案 0 :(得分:11)

使用Class class's getDeclaredMethods() method

  

返回一个Method对象数组,这些对象反映由此Class对象表示的类或接口声明的所有方法。这包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法。

Method[] declaredMethods = c.getDeclaredMethods();

答案 1 :(得分:0)

您可以按如下方式从Object(或其他类)中排除方法:

Method[] methods2 = new Object().getClass().getMethods();
HashMap<Method, Boolean> hash = new HashMap<Method, Boolean>();

for (Method method : methods2) hash.add(method, false);

for (Method method : methods) {
    if (!hash.containsKey(method)) System.out.println(method.getName());
}

这将允许您使用继承的方法,这与@ rgettman的答案不同。使用HashMap,因此检查方法所在的类是在恒定时间内发生的,运行时是线性的。