gpt4 book ai didi

java - Scala 2.9.2 无法处理 String 类的重载格式方法 - 为什么?

转载 作者:行者123 更新时间:2023-11-29 09:35:44 25 4
gpt4 key购买 nike

例子:

scala> String.format("%d", 2)
<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("%d", 2)
^

为什么Scala不能处理String类重载的format方法?

使用:Windows 7 64 位上的 Scala 2.9.2。

最佳答案

改用这个:

"%d".format(2)

String.format 方法是 Java 的东西,所以它期望输入参数是 java.lang.Object 的子类型。 Scala 的 Int 不是 java.lang.Object:

scala> val i: java.lang.Object = 2
<console>:7: error: type mismatch;
found : Int(2)
required: java.lang.Object
Note: an implicit exists from scala.Int => java.lang.Integer, but
methods inherited from Object are rendered ambiguous. This is to avoid
a blanket implicit which would convert any scala.Int to any AnyRef.
You may wish to use a type ascription: `x: java.lang.Integer`.
val i: java.lang.Object = 2
^

要了解更多相关信息,您应该阅读 Scala 对 AnyValAnyRef 类型的区分。为了提高效率,Java 区分对象(如 Integer)和基元(如 int)。 Scala 也有类似的区别。所有类型都从 Any 扩展,但是“值类型”(基本上对应于基元)从 AnyVal 扩展,其他所有类型都从 AnyRef 扩展(基本上 java.lang.Object)。阅读更多 here .

因此,要使用 String.format,您必须将其替换为 Java Integer,这是一个 Object:

String.format("%d", new java.lang.Integer(2))

但是不要这样做;如上所述,只需按照 Scala 方式使用即可。

关于java - Scala 2.9.2 无法处理 String 类的重载格式方法 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com