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) は java.lang.InterruptedException をスローし、public final void java.lang.Object.wait(long,int) は 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()が利用できないのはなぜですか?

4

2 に答える 2

20

getMethods()public メソッドを返します (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の状態(強調鉱山):

この Class オブジェクトによって表されるクラスまたはインターフェイスのすべてのパブリック メンバー メソッドを反映する Method オブジェクトを含む配列を返します

于 2012-08-07T11:28:23.977 に答える