Получение параметров String... и передача его значений другому методу, который получает параметры String...
private String createURI (String URL , String... parameters) {
if (parameters != null && parameters.length > 0) {
return String.format(URL, "5435534", "John" , parameters[0].toString());
}
return String.format(URL, "5435534", "John");
}
Я создал метод, который должен поддерживать получение URL или URL+ дополнительные параметры и создавать из них URL по переданным значениям. конечно, количество%s в URL должно соответствовать количеству параметров.
Я использую это так:
createURI ("%s/call/%s")
==> 5435534 / call / John
createURI ("%s/call/%s/%s" , "familyName")
==> 5435534 / call / John / familyName
Я не хотел создавать что-то вроде этого:String createURI (String URL , String parameter)
и просто передать пустую строку, когда я не хочу ее использовать, а затем проверить в методе, является ли текст пустым или нет, и вызвать метод следующим образом:
createURI ("%s/call/%s" , "")
createURI ("%s/call/%s/%s" , "FamilyName")
у меня вопрос, как я могу улучшить его, отправив точно аргументы, полученные в метод String.format без явной отправки элемента [0] - я не хочу проверять значения, String.format
делать это уже, но для строковых значений. если я просто передаю параметры как есть (типа String...) в String.format(URL, "5435534", parameters)
он не получает фактическое строковое значение, но полный объект.
2 ответа
private String createURI (String URL , String... parameters) {
ArrayList<String> strs = new ArrayList<>();
strs.add("5435534");
strs.add("John");
strs.addAll(Arrays.asList(parameters);
return String.format(URL, strs.toArray());
}
Вы можете объединить все параметры в список и преобразовать его в массив для String.format
, Этот путь не будет, если для этого. и нужно взывать: varargs
размер по умолчанию равен 0.
String.format()
(без Locale
Параметр) принимает два аргумента: строку формата и массив Object
:
public static String format(String format,
Object... args)
Поскольку второй аргумент использует ...
нотации, у вас есть два варианта для передачи второго аргумента: либо вы можете передать его Object[]
или вы можете передать ему ноль или более аргументов любого типа, которые затем будут объединены в Object[]
, Это единственные два варианта. Вы не можете, скажем, передать два аргумента, а затем передать массив, который метод увидит как третий, четвертый и т. Д. Аргумент. Этот массив будет рассматриваться как один аргумент.
Тем не менее, вы можете создать свой собственный Object[]
массив, установите первые два элемента массива и скопируйте остаток, что-то вроде:
Object[] formatParameters = new Object[parameters.length + 2];
formatParameters[0] = "5435534";
formatParameters[1] = "John";
for (int i = 0; i < parameters.length; i++) {
formatParameters[i + 2] = parameters[i];
}
return String.format(URL, formatParameters);
Обратите внимание, что formatParameters
должен быть Object[]
чтобы это работало (я не думаю, что это будет работать с String[]
). Это сделано для того, чтобы компилятор понял, что вы передаете массив параметров вместо одного параметра, тип которого является массивом.
(Примечание: должны быть методы в Arrays
что можно скопировать из parameters
в formatParameters
без петли, но мне сейчас не хочется их искать.)