4
import java.lang.reflect.Method;
import java.util.Arrays;

public class Test
{
     public static void main(String s[]) throws ClassNotFoundException
     {
        Class cls = Class.forName("Test");
        System.out.println("Class is "+cls);
        Method[] mtds = cls.getMethods();
        System.out.println("Methods are "+Arrays.deepToString(mtds));  // not having all methods
    }

    void reflectionTestMethod()
    {
        System.out.println("test");
    }
}

输出是

类是类测试

方法是 [public static void Test.main(java.lang.String[]) throws java.lang.ClassNotFoundException, public final void java.lang.Object.wait() throws java.lang.InterruptedException, public final native void java。 lang.Object.wait(long) throws java.lang.InterruptedException, public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException, public boolean java.lang.Object.equals(java.lang .Object), public java.lang.String java.lang.Object.toString(), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass() , public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()]

为什么反射测试方法()在输出中不可用?

4

2 回答 2

20

getMethods()返回公共方法(如其 Javadoc 中所述)

尝试getDeclaredMethods()改为公开该方法。

顺便说一句,你可以这样做:

Class cls = Test.class;
System.out.println("Class is " + cls);
for(Method method : cls.getDeclaredMethods())
    System.out.println(method);
于 2012-08-07T11:29:19.903 回答
4

因为那个方法不是公开的。javadoc 状态(强调我的):

返回包含 Method 对象的数组,反映此 Class 对象表示的类或接口的所有公共成员方法

于 2012-08-07T11:28:23.977 回答