Java /反射 - 哪里出错?

时间:2012-10-25 12:05:03

标签: java reflection

我在这个网站上发现了一些关于java / reflection的帖子。但还是听不懂东西。谁能告诉我代码中的错误? (需要打印“你好!”)

输出:

java.lang.NoSuchMethodException: Caller.foo()

这是我的Main.java

import java.lang.reflect.*;

class Main {

    public static void main(String[] args) {
        Caller cal = new Caller();
        Method met;
        try {
            met = cal.getClass().getMethod("foo", new Class[]{});
            met.invoke(cal);
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}

class Caller {
    void foo() {
        System.out.println("HELLO!");
    }
}

2 个答案:

答案 0 :(得分:8)

getMethod()仅查找public种方法。将Caller#foo()方法的访问修饰符更改为public,或使用getDeclaredMethod()代替。

答案 1 :(得分:0)

import java.lang.reflect.*;

public static void main(String[] args) {
    public static void main(String[] args) {
        try {
            Class c = Class.forName("Caller"); 
            Object obj = c.newInstance();
            Method m = c.getMethod("foo");
            m.invoke(obj);
        } catch (Exception e) {
            System.out.println(e.toString());
        }           
    }
}

public class Caller {
    public void foo() {
        System.out.println("HELLO!");
    }
}