Как создать метод 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);
как я могу этого достичь?
7 ответов:
вы можете написать удобный метод:
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
непосредственно.
Это известно как 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.формат метод теперь имеет это объявление:
public static String format(String pattern, Object... arguments);
взгляните на руководство 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);
Это всего лишь расширение для приведенных выше ответов.
- в методе может быть только один переменный аргумент.
- переменный аргумент (varargs) должен быть последним аргументом.
четко объяснил здесь и правила, чтобы следовать, чтобы использовать Аргумент.
ниже будет создан набор аргументов переменной длины типа string:
print(String arg1, String... arg2)
затем вы можете обратиться к
arg2
как массив строк. Это новая функция в Java 5.
переменные аргументы должны быть последними параметрами, указанными в объявлении функции. Если вы попытаетесь указать другой параметр после аргументов переменной, компилятор будет жаловаться, так как нет способа определить, сколько параметров на самом деле принадлежит аргументу переменной.
void print(final String format, final String... arguments) { System.out.format( format, arguments ); }