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)