代わりにこれを使用してください:
"%d".format(2)
このString.format
メソッドは Java のものであるため、 のサブタイプである入力パラメータが必要ですjava.lang.Object
。ScalaInt
は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
^
AnyVal
これについてもっと学ぶには、Scala のと型の区別を読んでくださいAnyRef
。Integer
Java では、効率のためにオブジェクト ( など) とプリミティブ ( など) を区別していint
ます。Scala にも同様の違いがあります。すべての型は から拡張されAny
ますが、「値型」(基本的にプリミティブに対応する) は から拡張されAnyVal
、他のすべてはAnyRef
(基本的にjava.lang.Object
) から拡張されます。詳細はこちらをご覧ください。
したがって、使用するには、次String.format
の Java に置き換える必要がありInteger
ますObject
。
String.format("%d", new java.lang.Integer(2))
ただし、これは行わないでください。上記のように、Scala の方法で使用してください。