Аналогия va_args в java, и их переброс

Рейтинг: 3Ответов: 1Опубликовано: 21.07.2023

Ребят, давно на Java не писал, уже базовый синтаксис забывать начал.

Подскажите пожалуйста как аналог Си va_args передать методу наследнику? В моём случае String.format, использую 8й JDK.

public void smsMapStringFmt(String format, Object ...arguments) { // это помню
    smsMapString(String.format(format, ...arguments)); // тут буксую..
}

Ответы

▲ 4Принят

В данном случае достаточно убрать многоточие при вызове:

smsMapString(String.format(format, arguments));

При этом никто не мешает добавить новые аргументы при вызове, в том числе и как массив, тогда изменится наполнение массива вараргов внутри вызываемой функции:

smsMapStringFmt("Test: %s - %s %n", "hip", "hop");

public void smsMapStringFmt(String format, Object ...arguments) {

    String[] args = {"foo", "bar"};

    // передаётся строки из массива arguments
    smsMapString(String.format(format, arguments)); // "hip", "hop"

    // передаются массивы
    smsMapString(String.format(format, arguments, args)); // {"hip", "hop"}, {"foo", "bar"}

    // передаётся массив и строка
    smsMapString(String.format(format, arguments, "hello")); // {"hip", "hop"}, "hello"
}