我正在使用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;
}
}
如您所见,该方法确实存在于类中。如果你能指出我的错误,我会非常感激。
答案 0 :(得分:8)
公开您的测试方法。我相信Class.getMethod()仅限于公共方法。
答案 1 :(得分:3)
如果没有你发布确切的异常和你的输出,很难说,但我怀疑是因为这些类在两个独立的包中,并且由于方法的默认修饰符只是protected
它失败了。
使用getDeclaredMethod()
获取通常不可见的方法。