首页 > 解决方案 > Kotlin - 局部变量与全局变量

问题描述

您可以在不初始化或添加lateinit的情况下声明一个局部变量,但对于全局变量来说并非如此,我的问题是为什么?为什么编译器也不给局部变量错误?

例如 :

class A{

    var abc : String  // this is not allowed by compiler

    fun myOwnedFun(){
       var abcd : String // this is allowed 
    }

}

我知道一件事是允许的,另一件事是不允许的,但我很好奇为什么。

标签: androidkotlin

解决方案


局部变量的范围是定义它的函数。编译器在第一次访问之前验证局部变量是否已在函数内部初始化是没有问题的。

对于公共类字段,范围是无限的,因此编译器无法确保在访问该字段之前对其进行初始化。为了防止程序通过使用未初始化的变量进入错误状态,编译器会引发错误。


推荐阅读