请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么不能在 main 方法中属性代理

老师您好,我将MainViewModel中的属性代理移到main方法中为什么不能用呢,不太明白这个报错提示

class MainViewModel {
    val databaseModel: DatabaseModel by ModelDelegate
    val networkModel: NetworkModel by ModelDelegate
    val spModel: SpModel by ModelDelegate
    val spModel2: SpModel by ModelDelegate
}
...

fun main() {
    initModels()

    val databaseModel: DatabaseModel by ModelDelegate
    ...
}

提示报错如下
image-20200105222110821

正在回答

1回答

属性代理不能用作局部变量吧,你移到函数外试试

----

补充说明:局部变量属性代理从 Kotlin 1.1 开始支持。

1 回复 有任何疑惑可以回复我~
  • 提问者 Petterp #1
    可以的,ModelDelegate类里面的 getValue,在普通的类里面参数thisRef可以不做null处理,在方法与main函数中使用需要做null处理。
    getValue(thisRef: Any?, property: KProperty<*>).
    如上即可。
    为什么在类里面当前类对象就一定不为null呢,当我在类里面添加一个方法,然后使用 属性代理,此时如果getValue()中thisRef参数未加 ? ,也会提示报错,为什么呢?
    回复 有任何疑惑可以回复我~ 2020-01-06 10:37:45
  • bennyhuo 回复 提问者 Petterp #2
    课程里面 thisRef 的类型确实用的是 Any,实际上属性代理对这个类型没有明确要求。
    
    如果是局部变量,这个 thisRef 应该就是 null,不管函数本身是否有 receiver,局部变量是不会绑到函数所在类上的,所以局部变量的情况 thisRef 一定是 null。
    回复 有任何疑惑可以回复我~ 2020-01-06 11:17:35
  • 提问者 Petterp #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-06 16:34:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信