Scala не может распознать, какой метод вызвать

Я хочу запустить немного Java в консоли Scala. Вот что я получаю:

scala> String.format("hello %d",3);
<console>:8: error: overloaded method value format with alternatives:
  (java.util.Locale,java.lang.String,<repeated...>[java.lang.Object])java.lang.String <and>
  (java.lang.String,<repeated...>[java.lang.Object])java.lang.String
 cannot be applied to (java.lang.String, Int)
              String.format("hello %d",3);

Почему Scala не может распознать, какой метод вызывать, если набор аргументов отличается, а те, которые я предоставляю, довольно однозначны?

Что странно, то же сообщение появляется и при попытке вызвать функцию с аргументами, которые не соответствуют ни одному из обоих наборов аргументов, например String.format()

Я использовал scala 2.9.1

Ответ 1

Ваши аргументы не соответствуют прототипу функции. Вы вызываете функцию со вторым аргументом scala.Int который не является java.lang.Object.

Преобразуйте его в java.lang.Integer и он будет работать.

Смотрите также бокс и распаковку в Scala.

Ответ 2

Я рекомендую использовать новые String-интерполяторы, доступные в Scala 2.10.X. Они проще в использовании.

  val x = 3
  String.format("hello %d", x: Integer)

было бы просто:

  val x =3 
  s"hello $x"

Ответ 3

Пытаться

String.format("hello %d",3.asInstanceOf[java.lang.Object]);

Ответ 4

Кроме того, вы можете позволить Scala сделать бокс для вас:

String.format("hello %d", 3: Integer)