27 Stimmen

Was bewirkt :_* beim Aufruf einer Java vararg-Methode von Scala aus?

Mögliches Duplikat:
Was bedeutet :_* (Doppelpunkt-Unterstrich-Stern) in Scala tun?

Ich verwende die REPL, um eine Java vararg-Methode mit einem Scala-Array aufzurufen.

Ich erhalte eine Fehlermeldung, wenn ich dies tue:

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

Aber wenn ich das tue, dann funktioniert es:

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

Meine Frage lautet: Was bedeutet :_* tun? Wo ist sie in der Scala-API definiert?

37voto

Dan Simon Punkte 12543

Hinzufügen von :_* weist den Compiler an, das Array als varargs zu behandeln. Das funktioniert in Scala genauso wie in Java. Wenn ich eine Methode

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

Ich kann es als solches bezeichnen:

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

aber wenn ich ihm eine tatsächliche Sequenz übergeben will (wie Sie es mit getMethod ) Ich würde es tun:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X