Как условно передать параметры в Java методу, который принимает переменное число аргументов?
@ Ричард ответил на конкретный вопрос относительно класса JDO Query
. (Используйте один из альтернативных queryWith...
методов.)
Ответ на более общий вопрос - «это зависит». В частности, это зависит от сигнатур метода.
1) Если объявлено, что метод принимает
переменное количество передаваемых параметров
в виде массива, списка, карты или чего-либо еще,
тогда ответ очевиден. собирать
фактические параметры в массиве /
список / карта / что угодно, и передать их.
2) Если метод объявлен с
параметр "varargs", то вы можете
передать явный массив фактических
параметры; например,
public void test(String... args) { ... }
test("Hi", "Mom");
test(new String[]{"Hi", "Pa"});
String[] args = new String[]{"Hi", "Bro"};
test(args);
3) Если на самом деле есть несколько
перегружены методы, то у вас нет
выбор, но программно выбрать
и вызвать соответствующую перегрузку
на основе количества параметров, которые вы
должны пройти:
public void test(String arg1) { ... }
public void test(String arg1, String arg2) { ... }
...
if (nosArgs == 1) {
test(arg1);
} else if (nosArgs == 2) {
test(arg1, arg2);
} else ...
Вы можете подумать, что рефлексия поможет, потому что когда вы вызываете метод рефлексивно, вы передаете фактические аргументы как Object[]
. Но это мало помогает, потому что вам также нужно использовать соответствующий объект Method
, и каждая из перегрузок (скажем) метода test
имеет свой объект Method
. Таким образом, вы получите условный код / код переключения, который эквивалентен неотражающему регистру.