IllegalArgumentException: неверное количество аргументов - PullRequest
4 голосов
/ 09 декабря 2011

Я пытаюсь запустить следующий код:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflection {

    /**
     * @param args
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static void main(String[] args) throws IllegalAccessException,
            InvocationTargetException, IllegalArgumentException {
        Class<Cls> cls = Cls.class;
        Method[] methods = cls.getMethods();
        for (Method m : methods) {
            m.invoke(cls);
        }
    }

}

class Cls {
    public static void method1() {
        System.out.println("Method1");
    }

    public static void method2() {
        System.out.println("Method2");
    }
}

Я получаю исключение IllegalArgumentException: неверное количество аргументов, хотя оба метода не принимают аргументов.

Я пытался передать null методу invoke, но это бросает NPE.

Ответы [ 2 ]

7 голосов
/ 09 декабря 2011

Вы действительно вызываете методы правильно, проблема в том, что метод Class.getMethods () возвращает ВСЕ методы в классе, ВКЛЮЧАЯ те, что унаследованы от суперклассов, таких как Object в данном случае. Документация гласит:

Возвращает массив, содержащий объекты Method, отражающие все открытые методы-члены класса или интерфейса, представленные этим объектом Class, включая те, которые объявлены классом или интерфейсом, и те, которые унаследованы от суперклассов и суперинтерфейсов.

В этом случае, например, вы можете вызвать Object.equals без каких-либо аргументов. То же самое относится и к методам Object.wait и т. Д.

0 голосов
/ 09 декабря 2011

Согласно документации :

Если число формальных параметров, требуемых базовым методом, равно 0, предоставленный массив args может иметь длину 0 или ноль.

Вы пробовали это?

* * 1010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...