我在这里收到错误:
val a: Int = 1
val i: Int with Object = a
如何将此1转换为scala中的整数对象?
我的目的是将其传递给Array[Int with Object]
。
它当前显示错误:
error type mismatch
found : Int(1)
required: Int with java.lang.Object
val i: Int with Object = a
^
修改
我有这个错误,因为我在scala中使用了一个android ArrayAdapter
,因此通过定义:
class ImageAdapter[T](ctx: Context, viewResourceId: Int, pointers: Array[T]) extends ArrayAdapter[T](ctx, viewResourceId, pointers) { ... }
它抛出了这个错误:
overloaded method constructor ArrayAdapter with alternatives:
(android.content.Context,Int,java.util.List[T])android.widget.ArrayAdapter[T] <and>
(android.content.Context,Int,Array[T with Object])android.widget.ArrayAdapter[T] <and>
(android.content.Context,Int,Int)android.widget.ArrayAdapter[T]
cannot be applied to (android.content.Context, Int, Array[T])
所以我需要将T
替换为T <: Object
class ImageAdapter[T <: Object](ctx: ...
答案 0 :(得分:33)
Int
是一种scala类型,通常映射到java的int
,但在装箱时会映射到java.lang.Integer
。无论是否盒装都是scala中的透明度。
无论如何,Int
绝对不是java.lang.Object
的子类型。实际上Int
是AnyVal
的子类型,它不是java.lang.Object
的子类型。因此,Int with Object
非常荒谬,因为您不能拥有Int
和java.lang.Object
的任何具体类型。
我认为你的意思是:
val i: Object = a
或者更具有说服力:
val i: AnyRef = a
当然,这些都不会编译,但您可以通过强制转换为Int
来强制AnyRef
值的装箱:
val i: AnyRef = a.asInstanceOf[AnyRef]
与一般情况不同,将AnyVal
投射到AnyRef
始终是安全的,并且会强制装箱。
您还可以使用更具体的Int.box
功能:
val i: AnyRef = Int.box(a)