casting - 类型不匹配:推断类型为 Int 但应为 Byte
问题描述
我目前正在尝试 kotlin,这里有一个简单的例子:
var byteToAdd: Byte = 3
var byteArray = byteArrayOf(1, 2, 3, 4, 5)
byteArray[0] += byteToAdd
println(byteArray[0])
但是在执行时,我在第 3 行得到一个错误,因为它说,那byteToAdd
是一个Integer
,即使我在第 1 行将类型设置byteToAdd
为Byte
。
为什么会这样?
解决方案
带有+=
操作符的这条线相当于这个更长的调用 - 如果您在操作符上调用它,您实际上可以在 IntelliJ 中使用意图操作在两者之间进行转换:
byteArray[0] = byteArray[0].plus(byteToAdd)
这里的问题是plus
您正在调用的运算符正在Byte
返回一个Int
(我假设是因为不能保证结果会适合 a Byte
),它不能被隐式转换回以Byte
放回数组中。
您可以通过使用这种更长的语法来解决此问题,并将结果额外转换回Byte
:
byteArray[0] = byteArray[0].plus(byteToAdd).toByte()