【问题标题】:Kotlin recursive problem when type checking类型检查时的Kotlin递归问题
【发布时间】:2021-03-21 10:54:16
【问题描述】:

我有以下我认为有效的代码,因为递归是由于回调而发生的。它不是作为函数调用的结果直接调用的。但是编译器似乎认为存在递归问题

class Model(callBack: CallBack) {
    interface CallBack {
        fun onSomething()
    }
}

class SomeClass {
   fun createModel() = Model(callBack)
        
   val callBack = object : Model.CallBack {    
        override fun onSomething() {
            val anotherModel = createModel()
            // Use model for something
        }
   }
}
Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly

有解决办法吗?

编辑

我还尝试将callBack 更改为一个函数,这样同一个实例不会被多个模型引用,但我得到了同样的错误

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    提到的递归问题不是函数调用,而是编译器试图找出声明的类型并且它陷入了递归类型检查。它想找到createModel 的输出类型,这取决于val callback 的类型,它又取决于createModel。正如它所说,声明它们的类型以解决问题。

    class Model(callBack: CallBack) 
    {
        interface CallBack {
            fun onSomething()
        }
    }
    
    class SomeClass {
        fun createModel() : Model = Model(callBack)
            
       val callBack : Model.CallBack = object : Model.CallBack {    
            override fun onSomething() {
                val anotherModel : Model = createModel()
                // Use model for something
            }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2020-11-26
      • 2019-03-22
      相关资源
      最近更新 更多