Получение параметров 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 без петли, но мне сейчас не хочется их искать.)

Другие вопросы по тегам