Java反射,getMethod()

时间:2011-12-02 17:55:27

标签: java class reflection methods

我正在使用Java反射的基础知识并观察类方法的信息。我需要获得一个匹配getMethod()函数描述的规范的方法。但是,当我这样做时,我得到一个NoSuchMethodException,我希望你能告诉我为什么我的实现是不正确的。

static void methodInfo2(String className) throws ClassNotFoundException, 

NoSuchMethodException{

        Class cls = null;
        try{
            cls = Class.forName(className);
        } catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        System.out.println("Cls:  "+cls);


        Method method1 = cls.getMethod("test", null);
        System.out.println("method1:  "+method1);


    }

EDIT1:当我打印出“Cls:”+ cls时,输出为“Cls:class a8.myclass2”。为什么它附加了类部分? (a8是正确的,所以不要担心)/ EDIT1

这是我用来从我的main函数读取类的函数,然后我想使用参数“test”和null得到getMethod(),其中“test”是方法的名称,null表示方法没有参数。我正在读的课叫做myclass2,在这里:

package a8;

public class myclass2 {

    void test(){
        //"takes no parameters"
        //"returns bool"
        //"name starts with test"
        //return true;
    }

}

如您所见,该方法确实存在于类中。如果你能指出我的错误,我会非常感激。

2 个答案:

答案 0 :(得分:8)

公开您的测试方法。我相信Class.getMethod()仅限于公共方法。

答案 1 :(得分:3)

如果没有你发布确切的异常和你的输出,很难说,但我怀疑是因为这些类在两个独立的包中,并且由于方法的默认修饰符只是protected它失败了。

使用getDeclaredMethod()获取通常不可见的方法。