Scala无法识别要调用的方法

时间:2012-01-28 20:00:42

标签: scala

我想在Scala控制台中运行一些Java。这是我得到的:

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 个答案:

答案 0 :(得分:14)

您的参数与函数原型不匹配。您使用第二个参数scala.Int调用该函数,该参数不是java.lang.Object

将其转换为java.lang.Integer即可。

另见boxing and unboxing in Scala

答案 1 :(得分:7)

我建议使用Scala 2.10.X中提供的新String插补器。 它们更容易使用。

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

只是:

  val x =3 
  s"hello $x"

答案 2 :(得分:3)

尝试

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

答案 3 :(得分:0)

另外,你可以让Scala为你做拳击:

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