4

このサイトで java/reflection に関する投稿をいくつか見つけました。しかし、まだ何かが理解できません。私のコードのどこにエラーがあるか誰か教えてもらえますか? (「HELLO!」を印刷する必要があります)

出力:

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!");
    }
}
4

2 に答える 2

10

getMethod() only finds public methods. Either change the access modifier of the Caller#foo() method to public, or use getDeclaredMethod() instead.

于 2012-10-25T12:07:06.140 に答える
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!");
    }
}
于 2012-10-25T12:17:09.773 に答える