在类内部和外部声明变量有什么区别?

时间:2021-03-22 08:39:33

标签: kotlin

示例如下:

在类中声明

class User {
    private val greeting = "Hello, World!"
}

在类外声明

private val greeting = "Hello, World!"

2 个答案:

答案 0 :(得分:1)

这归结为一个事实,即 Kotlin 允许您创建的文件包含类,而只包含“顶级”声明。查看他们的userguide

或者,换句话说:

<块引用>

顶级声明是在任何类、对象、接口或其他结构之外定义的函数或属性。

(来自here

因此:存在根本区别。您的第一个示例是仅存在于该类范围内的字段。另一个是一个很好的模块范围的私有变量。

答案 1 :(得分:1)

class 中声明的属性是该类的一部分。这意味着类的每个实例都有自己的属性版本,与其他实例分开。 (相反,如果您从不创建类的任何实例,则任何地方都没有该属性的 版本。)

因为它是private你只能从类中访问它;任何其他代码都看不到它。

在这种情况下,因为它是一个带有常量初始化器的 val,所以每个实例都会得到对同一个字符串的引用,所以你可能会认为它有点无意义。但它仍然是限制对属性的访问的好方法,并使任何阅读它的人都能清楚地看到它与类的联系。


在类外声明的属性是顶级属性。这属于包,是 Kotlin 最接近全局的东西。 正是其中之一。 (因此 User 的每个实例都将引用 same greeting — 不过,同样,因为它是一个带有常量初始化器的 val,因此不会产生任何在这种情况下的实际差异。)

您可以从该文件的任何位置访问它,但由于它是 private,因此无法在任何其他文件中进行编码。