类型不匹配:推断类型为Int但预期为Byte

Ada*_*dam 5 casting kotlin

我正在尝试kotlin,我在这里有一个简单的例子:

var byteToAdd: Byte = 3
var byteArray = byteArrayOf(1, 2, 3, 4, 5)
byteArray[0] += byteToAdd
println(byteArray[0])
Run Code Online (Sandbox Code Playgroud)

但在执行的时候,我得到的第3行的错误,因为它说,这byteToAdd是一个Integer,即使我设置的类型byteToAdd,以Byte1号线.

为什么会这样?

zsm*_*b13 7

这一行与+=运算符相当于这个较长的调用 - 如果你在运算符上调用它,你实际上可以在IntelliJ中使用意图动作在两者之间进行转换:

byteArray[0] = byteArray[0].plus(byteToAdd)
Run Code Online (Sandbox Code Playgroud)

这里的问题是plus你正在调用的运算符Byte返回一个Int(我假设因为不能保证结果适合a Byte),这不能被隐式转换回Byte数组中.

您可以通过使用这个更长的语法来解决此问题,并将结果进行额外的转换回Byte:

byteArray[0] = byteArray[0].plus(byteToAdd).toByte()
Run Code Online (Sandbox Code Playgroud)