Отражение Java, getMethod () - PullRequest
       11

Отражение Java, getMethod ()

2 голосов
/ 02 декабря 2011

Я работаю с основами рефлексии 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: класс a8.myclass2".Почему это добавляет часть класса?(a8 является правильным, так что не беспокойтесь об этом) / EDIT1

Это функция, которую я использую для чтения в классе из моей основной функции, а затем я хочу получить getMethod () с параметрами "test "и null, где" test "- это имя метода, а null означает, что метод не имеет параметров.Класс, в котором я читаю, называется myclass2, который находится здесь:

package a8;

public class myclass2 {

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

}

Как вы видите, метод действительно существует в классе.Если бы вы могли указать на мою ошибку, я был бы очень признателен.

Ответы [ 2 ]

8 голосов
/ 02 декабря 2011

Сделайте ваш метод теста общедоступным.Я считаю, что Class.getMethod () ограничен открытыми методами.

3 голосов
/ 02 декабря 2011

Без того, чтобы вы опубликовали точное исключение и ваши выходные данные, трудно сказать, но я подозреваю, что это потому, что классы находятся в двух отдельных пакетах, и так как модификаторы по умолчанию для метода - просто protected, он терпит неудачу.

Используйте getDeclaredMethod(), чтобы получить метод, который обычно не виден.

...