Подтвердить что ты не робот

Как создать Java-метод, который принимает переменное количество аргументов?

Например, собственный Java String.format() поддерживает переменное количество аргументов.

String.format("Hello %s! ABC %d!", "World", 123);
//=> Hello World! ABC 123!

Как я могу сделать свою собственную функцию, которая принимает переменное количество аргументов?


Последующий вопрос:

Я действительно пытаюсь сделать это для удобства:

System.out.println( String.format("...", a, b, c) );

Чтобы я мог назвать это чем-то менее подробным, например:

print("...", a, b, c);

Как я могу это достичь?

4b9b3361

Ответ 1

Вы можете написать удобный метод:

public PrintStream print(String format, Object... arguments) {
    return System.out.format(format, arguments);
}

Но, как вы можете видеть, вы просто просто переименовали format (или printf).

Здесь вы можете использовать его:

private void printScores(Player... players) {
    for (int i = 0; i < players.length; ++i) {
        Player player = players[i];
        String name   = player.getName();
        int    score  = player.getScore();
        // Print name and score followed by a newline
        System.out.format("%s: %d%n", name, score);
    }
}

// Print a single player, 3 players, and all players
printScores(player1);
System.out.println();
printScores(player2, player3, player4);
System.out.println();
printScores(playersArray);

// Output
Abe: 11

Bob: 22
Cal: 33
Dan: 44

Abe: 11
Bob: 22
Cal: 33
Dan: 44

Обратите внимание, что также существует аналогичный метод System.out.printf, который ведет себя одинаково, но если вы заглядываете в реализацию, printf просто вызывает format, поэтому вы можете использовать format напрямую.

Ответ 2

Это известно как varargs, см. ссылку здесь для более подробной информации

В предыдущих выпусках Java метод, который принял произвольное количество значений, потребовал, чтобы вы создали массив и поместили значения в массив до вызова метода. Например, вот как один из них использовал класс MessageFormat для форматирования сообщения:

Object[] arguments = {
    new Integer(7),
    new Date(),
    "a disturbance in the Force"
};
    String result = MessageFormat.format(
        "At {1,time} on {1,date}, there was {2} on planet "
         + "{0,number,integer}.", arguments);

По-прежнему верно, что в массиве должны быть переданы несколько аргументов, но функция varargs автоматизирует и скрывает процесс. Кроме того, он совместим с предыдущими API. Так, например, метод MessageFormat.format теперь имеет это объявление:

public static String format(String pattern,
                            Object... arguments);

Ответ 3

Взгляните на руководство Java на varargs.

Вы можете создать метод, как показано ниже. Просто наберите System.out.printf вместо System.out.println(String.format(....

public static void print(String format, Object... args) {
    System.out.printf(format, args);
}

В качестве альтернативы вы можете просто использовать статический импорт, если хотите ввести как можно меньше. Тогда вам не нужно создавать свой собственный метод:

import static java.lang.System.out;

out.printf("Numer of apples: %d", 10);

Ответ 4

Следующее создаст набор аргументов переменной длины строки:

print(String arg1, String... arg2)

Затем вы можете обратиться к arg2 как к массиву строк. Это новая функция в Java 5.

Ответ 5

Это просто дополнение к приведенным выше ответам.

  • В методе может быть только один аргумент переменной.
  • Переменный аргумент (varargs) должен быть последним аргументом.

Четко объяснено здесь и правила для использования Variable Argument.

Ответ 6

Аргументы переменной должны быть последним из параметров, указанных в объявлении вашей функции. Если вы попытаетесь указать другой параметр после аргументов переменной, компилятор будет жаловаться, поскольку нет способа определить, сколько из параметров действительно принадлежит аргументу переменной.

void print(final String format, final String... arguments) {
    System.out.format( format, arguments );
}

Ответ 7

Вы можете передавать все подобные значения типа в функции при вызове. В определении установите массив , чтобы все переданные значения могли быть собраны в этом массиве. например .

static void demo (String ... stringArray) {
  your code goes here where read the array stringArray
}