什么:_ *从Scala调用Java vararg方法时做什么?

可能重复:
什么:_* (冒号下划线明星)在Scala中做什么?

我正在使用REPL来调用带有Scala数组的Java vararg方法。

如果我这样做,我会收到错误:

 case class Person(name: String, age: Int) val array = Array(classOf[String], classOf[Int]) Person.getClass.getMethod("apply", array) 

但如果我这样做,那么它的工作原理:

 Person.getClass.getMethod("apply", array:_*) 

我的问题是:_*做什么? 它在Scala API中的定义在哪里?

添加:_*告诉编译器将数组视为varargs。 它与Scala和Java一样。 如果我有方法

 def foo(args: Int*) = args.map{_ + 1} 

我可以这样称呼它:

 foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5) 

但如果我想传递一个实际的序列(就像你使用getMethod )我会这样做:

 val mylist = List(1, 2, 3, 4) foo(mylist:_*)