【问题标题】:Kotlin: Type mismatch: inferred type is String but String.Companion was expectedKotlin:类型不匹配:推断类型是 String 但 String.Companion 是预期的
【发布时间】:2018-04-28 19:17:49
【问题描述】:

第 5 行和第 6 行出错。

Kotlin:类型不匹配:推断类型是 String 但 String.Companion 预料之中

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()
}

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    分配 String 到一个变量,该变量引用String.Companion 对象。这也使属性的类型为String.Companion。相反,您想要做的是定义属性的类型:

    var roboName: String
    

    另外,你可以更进一步,用赋值加入声明:

    var roboName: String = name
    var roboColor: String = color
    

    【讨论】:

      【解决方案2】:

      一个非常不同的场景让我想到了这个问题,我将分享我的场景,因为它可能会帮助其他人,对我来说,错误是

      类型不匹配:推断类型是字符串?但字符串是预期的

      在我的例子中,我声明了一个 String 类型的 var,实际上方法返回类型是一个可为空的字符串,即

      var variable:String 必须是 var variable:String?

      【讨论】:

        【解决方案3】:

        您的语法不正确。试试这个(使用数据类来简化它并修复类型声明的语法 - 使用 : 进行类型声明,而不是 =):

        data class Robot(val name: String, val color: String) {    
            fun makeBed() {
                println("I will make your bed.")
            }
        }
        
        fun main(args: Array<String>) {
            val robot1 = Robot("Robot1", "Black")
            println(robot1.name)
            println(robot1.color)
            robot1.makeBed()
        }
        

        【讨论】:

          【解决方案4】:

          你必须像这样添加变量:

          var roboName: String
          var roboColor: String
          

          【讨论】:

            【解决方案5】:

            您可以在声明的开头使用lateinit 关键字。

            class Robot (name: String,color :String) {
                lateinit var roboName = String
                lateinit var roboColor = String
                init {
                    this.roboName=name
                    this.roboColor=color
                }
                fun makeBed() {
                    println("I will make your bed.")
                }
            }
            
            fun main(args: Array&lt;String>) {
                var robot1 = Robot("Robot1","Black")
                println(robot1.roboName)
                println(robot1.roboColor)
                robot1.makeBed()
            }
            

            【讨论】:

              猜你喜欢
              • 2018-04-23
              • 2021-01-11
              • 2020-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-22
              相关资源
              最近更新 更多