Java反射:wait()方法重复三次.为什么?

Vis*_*ant 4 java reflection

我试图使用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方法重复三次?

Ted*_*opp 8

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)


Jes*_*per 5

因为该wait方法有三个重载版本,请参阅类的API文档java.lang.Object:

wait()
wait(long timeout)
wait(long timeout, int nanos)
Run Code Online (Sandbox Code Playgroud)