簡體   English   中英

java反射:getMethods函數沒有顯示方法

[英]java reflection: getMethods function not showing a method

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");
    }
}

輸出是

類是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)拋出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()在輸出中不可用?

getMethods()返回公共方法(因為它在Javadoc中聲明)

請嘗試使用getDeclaredMethods()或將該方法getDeclaredMethods()公共。

順便說一下,你可以這樣做:

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

因為那種方法不公開。 javadoc陳述 (強調我的):

返回一個包含Method對象的數組,這些對象反映此Class對象所表示的類或接口的所有公共成員方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM