Scala:如何强制将整数包装为对象?
我在这里得到一个错误:Scala:如何强制将整数包装为对象?,scala,object,int,Scala,Object,Int,我在这里得到一个错误: val a: Int = 1 val i: Int with Object = a 如何将这个1转换为scala中的整数对象? 我的目的是将其传递给数组[Int with Object]。 它当前显示错误: error type mismatch found : Int(1) required: Int with java.lang.Object val i: Int with Object = a
val a: Int = 1
val i: Int with Object = a
如何将这个1转换为scala中的整数对象?
我的目的是将其传递给数组[Int with Object]
。
它当前显示错误:
error type mismatch
found : Int(1)
required: Int with java.lang.Object
val i: Int with Object = a
^
编辑
我出现此错误是因为我使用的是scala的android,因此定义:
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])
重载方法构造函数ArrayAdapter与备选方案:
(android.content.Context,Int,java.util.List[T])android.widget.ArrayAdapter[T]
(android.content.Context,Int,数组[T with Object])android.widget.ArrayAdapter[T]
(android.content.Context,Int,Int)android.widget.ArrayAdapter[T]
无法应用于(android.content.Context、Int、数组[T])
所以我需要用
T替换T
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
当然,这些都不能编译,但是您可以通过强制转换为AnyRef
来强制装箱Int
值:
val i: AnyRef = a.asInstanceOf[AnyRef]
与一般情况不同,将AnyVal
强制转换为AnyRef
总是安全的,并且会强制装箱
您还可以使用更具体的Int.box
功能:
val i: AnyRef = Int.box(a)
对象不是一种特性-Int with Object
甚至意味着什么?我正在使用AndroidArrayAdapter
类,从scala它需要Array[t with Object]
类型的东西。从Java开始,它需要一个Java.lang.Object[]
。您能给我们展示一下您的实际代码吗?这样我们就可以理解您如何使用数组[T with Object]
类型了?