如何创build接受可变数量参数的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); 

我怎样才能做到这一点?

你可以写一个方便的方法:

 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

  • 可变参数
  • PrintStream#format(String format, Object... args)
  • PrintStream#printf(String format, Object... args)

这被称为可变参数查看链接在这里的更多细节

在过去的java发行版中,一个采用任意数量值的方法需要您创build一个数组,并在调用方法之前将这些值放入数组中。 例如,下面是使用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); 

多个参数必须传递给数组仍然是事实,但可变参数可以自动化并隐藏进程。 此外,它与预先存在的API向上兼容。 所以,例如,MessageFormat.format方法现在有这个声明:

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

看看有关可变参数的Java指南。

您可以创build一个如下所示的方法。 只需调用System.out.printf而不是System.out.println(String.format(...

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

或者,如果要尽可能less地input,则可以使用静态导入 。 那么你不必创build自己的方法:

 import static java.lang.System.out; out.printf("Numer of apples: %d", 10); 

下面将创build一个可变长度的stringtypes参数集:

 print(String arg1, String... arg2) 

然后您可以将arg2作为string数组引用。 这是Java 5中的一项新function。

这只是上面提供的答案的扩展。

  1. 方法中只能有一个variables参数。
  2. variables参数(可变参数)必须是最后一个参数。

这里清楚地解释和遵循使用可变参数的规则。

variables参数必须是函数声明中指定的最后一个参数。 如果你试图在variables参数后面指定另一个参数,编译器会抱怨,因为没有办法确定有多less参数实际上属于variables参数。

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

您可以在调用函数时传递函数中所有类似的值。 在函数定义中放置一个数组,以便所有传入的值都可以在该数组中收集 。 例如

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