Вызвать метод, принимающий несколько аргументов с массивом arguments - PullRequest
2 голосов
/ 09 июля 2009

Мне нужно вызвать метод, не зная априори, сколько будет количество аргументов.
Я попытался использовать член Method.invoke (Object, Object ...), передавая в качестве второго параметра массив объектов, который содержит мои аргументы, однако это не помогло.
Есть ли способ сделать то, что я после?

Ответы [ 3 ]

2 голосов
/ 09 июля 2009

То, как вы описываете это правильный способ сделать это. Однако ваш массив аргументов должен иметь точно такое же количество аргументов, что и целевой метод; они должны быть перечислены в правильном порядке и иметь соответствующие типы. Можете ли вы опубликовать трассировку стека исключений и пример кода?

0 голосов
/ 09 июля 2009

Varargs это путь. Проверьте документы :

Вы используете varargs, когда не знаете, сколько аргументов определенного типа будет передано методу. Это ярлык для создания массива вручную.
Чтобы использовать varargs, тип последнего параметра следует за многоточием (три точки, ...), затем пробелом и именем параметра. Затем метод может быть вызван с любым номером этого параметра, включая ни одного.

public Polygon polygonFrom(Point... corners) {
    int numberOfSides = corners.length;
    double squareOfSide1, lengthOfSide1;
    squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x) 
            + (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ;
    lengthOfSide1 = Math.sqrt(squareOfSide1);
    // more method body code follows that creates 
    // and returns a polygon connecting the Points
}

PS. Varargs доступен на Java 1.5 или более поздней версии.

0 голосов
/ 09 июля 2009

Получив объект Method, вы можете использовать getParameterTypes () , чтобы определить это. Из JavaDoc:

Возвращает массив объектов Class, которые представляют формальные типы параметров, в порядке объявления метода представленный этим методом объект. Возвращает массив длины 0, если Базовый метод не принимает параметров.

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