我试图使用Reflection获取方法名称,我在下面写了两个类:
package com.test;
public class Test {
private void method1() {
}
}
Run Code Online (Sandbox Code Playgroud)
.
package com.test;
import java.lang.reflect.Method;
public class Test2 {
public static void main(String[] args) throws SecurityException, ClassNotFoundException {
Method[] m = Class.forName("com.test.Test").getMethods();
for (Method method : m) {
System.out.println(method.getName());
}
}
}
Run Code Online (Sandbox Code Playgroud)
而不是getDeclaredMethods()我使用getMethods()我得到以下输出:
equals
hashCode
toString
getClass
notify
notifyAll
wait
wait
wait
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么wait方法重复三次?
wait在类中定义了三种名为的方法Object:
void wait()
void wait(long timeout)
void wait(long timeout, int nanos)
Run Code Online (Sandbox Code Playgroud)
您的代码正在打印每个方法名称,但不打印参数类型列表,因此它们在输出中看起来都相似.要查看参数类型,您可以使用类似的东西(可以对其进行改进以提供更好的格式:
for (Method method : m) {
System.out.println(method.getName());
for (Class<?> argClass : m.getParameterTypes()) {
System.out.println(" " + argClass.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
因为该wait方法有三个重载版本,请参阅类的API文档java.lang.Object:
wait()
wait(long timeout)
wait(long timeout, int nanos)
Run Code Online (Sandbox Code Playgroud)