Kotlin类型不匹配错误咨询:第5、6行报错问题排查
解决Kotlin类型不匹配错误:推断类型为String,但期望的是String.Companion
嘿,我一眼就瞅出你这段代码的问题啦——第5、6行的变量声明写法错了,才导致了那个类型不匹配的报错。
错误原因解析
你现在写的:
var roboName= String var roboColor= String
这里的String指的是String类的伴生对象(String.Companion),而不是你想要用来存储机器人名称、颜色的String类型。当你在init块里把name(实际是String类型)赋值给roboName时,就会出现「推断类型为String,但期望的是String.Companion」的类型不匹配错误。
修正后的代码
我们只需要把变量的类型声明改对就行,有两种写法:
写法1:明确声明变量类型(保留init块)
class Robot(name: String, color: String) { var roboName: String // 用冒号声明类型,不是赋值 var roboColor: String init { this.roboName = name this.roboColor = color } fun makeBed() { println("I will make your bed.") } } fun main(args: Array<String>){ var robot1 = Robot("Robot1","Black") println(robot1.roboName) println(robot1.roboColor) robot1.makeBed() }
写法2:直接初始化变量(更简洁,去掉init块)
Kotlin支持自动类型推断,我们可以直接在声明变量时用构造函数的参数初始化,省去init块:
class Robot(name: String, color: String) { var roboName = name // Kotlin自动推断类型为String var roboColor = color fun makeBed() { println("I will make your bed.") } } fun main(args: Array<String>){ var robot1 = Robot("Robot1","Black") println(robot1.roboName) println(robot1.roboColor) robot1.makeBed() }
运行结果
修正后运行代码,会正常输出:
Robot1 Black I will make your bed.
内容的提问来源于stack exchange,提问作者user8823037
相关产品推荐
相关产品推荐

