有没有办法避免从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)。有什么方法可以实现这个目标吗?
答案 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,因此检查方法所在的类是在恒定时间内发生的,运行时是线性的。