gpt4 book ai didi

Scala:如何强制将整数包装为对象?

转载 作者:行者123 更新时间:2023-12-04 23:09:50 26 4
gpt4 key购买 nike

我在这里遇到错误:

val a: Int = 1
val i: Int with Object = a

如何在 Scala 中将此 1 转换为整数对象?
我的目的是将它传递给 Array[Int with Object] .
它当前显示错误:
error type mismatch
found : Int(1)
required: Int with java.lang.Object
val i: Int with Object = a
^

编辑

我有这个错误,因为我使用的是 android ArrayAdapter 来自 scala,因此通过定义:
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 <: Objectclass ImageAdapter[T <: Object](ctx: ...

最佳答案

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

无论如何,Int绝对不是java.lang.Object的子类型.事实上IntAnyVal 的子类型这不是 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]

与一般情况不同,类型转换 AnyValAnyRef总是安全的,并且会强制拳击。

您也可以使用更具体的 Int.box功能:
val i: AnyRef = Int.box(a)

关于Scala:如何强制将整数包装为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com