You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Kotlin IntArray转ValueAnimator所需Java Object[]方法问询

解决Kotlin中IntArray传入ValueAnimator.ofObject的类型不匹配问题

嘿,这个问题我之前也碰到过!核心原因是Kotlin的IntArray是基本类型数组,而ValueAnimator.ofObject()的可变参数要求的是Object类型——基本类型Int没法直接当Object传,得先装箱成包装类才行。

为什么直接用*fooIntArray不行?

当你用展开操作符*处理IntArray时,得到的是一个个原生的int值(Java层面的基本类型),但ofObject()需要的是Object实例,基本类型和对象类型之间没法自动转换,所以编译器会抛出类型不匹配的错误。

解决方案:把IntArray转成包装类型数组

Kotlin里可以通过toTypedArray()方法,把IntArray转换成Array<Int>——这个类型对应Java的Integer[],是纯正的对象数组,完全符合Object...的参数要求。

举个完整的示例:

// 假设你有这样的IntArray
val fooIntArray = intArrayOf(0, 150, 300)

// 转换为包装类型数组(对应Java的Integer[])
val wrappedIntArray = fooIntArray.toTypedArray()

// 现在可以正常用展开操作符传入ofObject了
val animator = ValueAnimator.ofObject(
    object : TypeEvaluator<Int> {
        override fun evaluate(fraction: Float, startValue: Int, endValue: Int): Int {
            return startValue + ((endValue - startValue) * fraction).toInt()
        }
    },
    *wrappedIntArray
)

额外小技巧:简化写法

如果不想单独声明变量,也可以直接在参数里完成转换:

val animator = ValueAnimator.ofObject(
    yourTypeEvaluator,
    *fooIntArray.toTypedArray()
)

这样就能完美解决类型不匹配的问题啦!

内容的提问来源于stack exchange,提问作者Acadian_Ghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:24