Joh*_*ood 1 java scala overloading
例:
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)
^
Run Code Online (Sandbox Code Playgroud)
为什么Scala不能处理类的重载format方法String?
使用:Windows 7 64位上的Scala 2.9.2.
dhg*_*dhg 15
请改用:
"%d".format(2)
Run Code Online (Sandbox Code Playgroud)
该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
^
Run Code Online (Sandbox Code Playgroud)
要了解有关此内容的更多信息,您应该阅读Scala对类型AnyVal和AnyRef类型的区分.为了提高效率,Java在对象(如Integer)和基元(如int)之间有区别.Scala也有类似的区别.所有类型都延伸Any,但"值类型"(基本上对应于基元)延伸AnyVal而且其他所有内容都从AnyRef(基本上java.lang.Object)延伸.在这里阅读更多.
所以,要使用String.format你必须用Java替换它Integer,这是一个Object:
String.format("%d", new java.lang.Integer(2))
Run Code Online (Sandbox Code Playgroud)
但是不要这样做; 如上所述,只需使用Scala方式即可.
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |