首页 文章

java反射:getMethods函数没有显示方法

提问于
浏览
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()]

为什么 reflectionTestMethod() 在输出中不可用?

2 回答

  • 16

    getMethods() 返回公共方法(因为它在Javadoc中声明)

    请尝试使用 getDeclaredMethods() 或将该方法设为公开 .

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

    Class cls = Test.class;
    System.out.println("Class is " + cls);
    for(Method method : cls.getDeclaredMethods())
        System.out.println(method);
    
  • 4

    因为那种方法不公开 . javadoc states(强调我的):

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

相关问题