16

我在这里收到一个错误:

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
                                ^

编辑

我有这个错误,因为我使用的是ArrayAdapter来自 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])

所以我需要TT <: Objectin替换class ImageAdapter[T <: Object](ctx: ...

4

1 回答 1

41

Int是一个 scala 类型,通常映射到 java 的int,但java.lang.Integer在装箱时会映射到。是否装箱在 scala 中大多是透明的。

无论如何,Int绝对不是java.lang.Object. 事实上Int是 的子类型AnyVal不是 的子类型java.lang.Object。鉴于您不能有任何既是 an又是 a 的具体类型,因此Int with Object这几乎是荒谬的。Intjava.lang.Object

我认为你的意思是类似于:

val i: Object = a

或者更惯用:

val i: AnyRef = a

当然,这些都不能编译,但您可以Int通过强制转换为AnyRef

val i: AnyRef = a.asInstanceOf[AnyRef]

与一般情况不同,将 anAnyVal转换为 anAnyRef始终是安全的,并且会强制拳击。

您还可以使用更具体的Int.box功能:

val i: AnyRef = Int.box(a)
于 2013-05-25T16:39:38.860 回答