2012-01-28 2 views
13

Я хочу запустить немного Java в консоли Scala. Вот что я получаю: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()

Я использую 2.9.1 Scala

ответ

13

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

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

См. Также boxing and unboxing in Scala.

+0

, что ссылка бросает 404 –

0

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

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

Попробуйте

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

-1: Дублирование ответ. – sschaef

7

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

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

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

val x =3 
    s"hello $x" 
Смежные вопросы