Scala не может распознать какой метод вызывать - PullRequest
14 голосов
/ 29 января 2012

Я хочу немного запустить 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

Ответы [ 4 ]

14 голосов
/ 29 января 2012

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

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

См. Также Бокс и распаковка в Scala .

7 голосов
/ 05 марта 2014

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

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

будет просто:

  val x =3 
  s"hello $x"
3 голосов
/ 01 октября 2012

Попробуйте

String.format("hello %d",3.asInstanceOf[java.lang.Object]);
0 голосов
/ 30 января 2012

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

String.format("hello %d", 3: Integer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...