首页 新闻 会员 周边 捐助

反射NoSuchMethodException

0
悬赏园豆:10 [已解决问题] 解决于 2021-11-18 10:44

代码如下

public class test {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Class c = Class.forName("com.demo.pojo.user");
        Object obj = c.newInstance();
        Method[] methods = c.getMethods();
        for (Method method:
             methods) {
            System.out.println(method);
        }
        Method method = c.getMethod("getName", String.class);
        System.out.println(method.invoke(c, obj));
    }
}

输出结果如下

public java.lang.String com.demo.pojo.user.getName()
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 final void java.lang.Object.wait() 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()
Exception in thread "main" java.lang.NoSuchMethodException: com.demo.pojo.user.getName(java.lang.String)
	at java.base/java.lang.Class.getMethod(Class.java:2108)
	at com.demo.reflection.test.main(test.java:15)

可以看到找到了com.demo.pojo.user.getName()这个方法,但是执行c.getMethod("getName", String.class)却提示异常,说没有该方法???

以下是类user的代码

package com.demo.pojo;

public class user {
    public String getName(){
        return "User";
    }
}
up-bear的主页 up-bear | 初学一级 | 园豆:134
提问于:2021-11-17 21:49
< >
分享
最佳答案
0

public class test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class c = Class.forName("com.demo.pojo.user");
Object obj = c.newInstance();
Method[] methods = c.getMethods();
for (Method method:
methods) {
System.out.println(method);
}
//getName方法没有参数哦,可变参数列表不传
Method method = c.getMethod("getName");
//此处同上
System.out.println(method.invoke(obj));
}
}
ps:java规范,类名大写哦

收获园豆:10
绝不是木头 | 小虾三级 |园豆:507 | 2021-11-18 09:27

昨天复习反射,确实没注意明明规范,谢谢提醒啦。

up-bear | 园豆:134 (初学一级) | 2021-11-18 09:33
其他回答(1)
0

com.demo.pojo.user.getName(java.lang.String)
这里的 String.class 是指 参数哦

快乐的欧阳天美1114 | 园豆:4004 (老鸟四级) | 2021-11-17 21:54

哈哈,没看仔细,丢脸了(/▽\)。

支持(0) 反对(0) up-bear | 园豆:134 (初学一级) | 2021-11-18 09:17

谢谢啦

支持(0) 反对(0) up-bear | 园豆:134 (初学一级) | 2021-11-18 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册