首页 > 解决方案 > 类型不匹配:推断类型为 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 行将类型设置byteToAddByte

为什么会这样?

标签: castingkotlin

解决方案


带有+=操作符的这条线相当于这个更长的调用 - 如果您在操作符上调用它,您实际上可以在 IntelliJ 中使用意图操作在两者之间进行转换:

byteArray[0] = byteArray[0].plus(byteToAdd)

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

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

byteArray[0] = byteArray[0].plus(byteToAdd).toByte()

推荐阅读