Вызов функции Java с изменением количества параметров - PullRequest
1 голос
/ 20 марта 2019

У меня есть вопрос. Пока моя программа запущена, я получаю запрос с параметрами (заранее не знаю точную сумму), именем функции и именем класса. Я загружаю класс во время выполнения и хочу вызвать метод, указанный в запросе. Мой вопрос сейчас: Как я могу вызвать функцию с изменяющимся количеством параметров?

myClass.getMethod(this.metaData.getFunctionName(), java.lang.Integer);

Это был бы обычный звонок. Но я хочу что-то вроде этого

myClass.getMethod(this.metaData.getFunctionName(), ..args);

или как это

myClass.getMethod(this.metaData.getFunctionName(), for(param p: in request = new param));

Я знаю, что это невозможно, но возможно ли это по-другому? Или я должен знать точную сумму заранее?

РЕДАКТИРОВАТЬ решение: @LppEdd опубликовал решение, а @DawoodibnKareem сказал это и в комментариях. Если у вас есть функция, определенная с помощью (... args), вы можете передать массив, и каждый отдельный элемент массива будет считаться переданным аргументом.

Я знаю, что это очень небезопасно, но безопасность каким-то образом обеспечивается в этом проекте.

, с уважением Dennis

1 Ответ

0 голосов
/ 20 марта 2019

Возможно, вы захотите что-то вроде

private Class<?>[] buildParameterTypes(final List<String> types) {
    return types.stream()
                .map(typeStr -> {
                    try {
                        return Class.forName(typeStr);
                    } catch (final ClassNotFoundException e) {
                        throw new IllegalArgumentException(e);
                    }
                }).toArray(Class[]::new);
}

Использование

myClass.getMethod(this.metaData.getFunctionName(), buildParameterTypes(strTypeList));

Запрос должен отправлять типы параметров в виде массива String.

[
  "java.lang.String",
  "java.lang.Integer",
  ...
]

Но, да, не делай этого.
Кстати, вы говорите о веб-запросе? Какой запрос?

...