2012-01-28 50 views
13

我想在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); 

爲什麼斯卡拉無法識別要調用哪個方法,如果參數設置是不同的,我提供的有相當unambigous?

什麼奇怪的是,當我嘗試調用帶參數的函數,它不匹配任何兩個參數設置的,例如也出現了同樣的信息String.format()

我使用Scala的2.9.1

回答

13

您的參數不匹配的函數原型。你用第二個參數scala.Int調用該函數,這不是java.lang.Object

將其轉換爲java.lang.Integer,它會工作。

boxing and unboxing in Scala見。

+0

該鏈接被扔了404 – 2017-10-23 23:54:08

0

此外,您還可以讓斯卡拉做拳擊爲您提供:

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

嘗試

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

-1:重複的答案。 – sschaef 2012-10-01 12:52:07

7

我建議使用Scala中2.10.X.提供的新字符串插值 他們更容易使用。

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

是簡單的:

val x =3 
    s"hello $x"