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

Kotlin 在类内部和外部声明变量之间有什么区别?,kotlin,Kotlin,以下是一个例子: 在类内声明 class User { private val greeting = "Hello, World!" } private val greeting = "Hello, World!" 在课堂外宣布 class User { private val greeting = "Hello, World!" } private val greeting = "Hello, Worl

以下是一个例子:

在类内声明

class User {
    private val greeting = "Hello, World!"
}
private val greeting = "Hello, World!"
在课堂外宣布

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

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

或者,换句话说:

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

(来自)


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

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

因为它是
私有的
您只能通过类访问它;它对任何其他代码都不可见

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


在类外部声明的属性是顶级属性。  这属于包,是Kotlin最接近全局的东西。  其中只有一个。  (因此,
User
的每个实例都会引用相同的
问候语
——尽管如此,因为它是一个带有常量初始化器的
val
,在这种情况下没有任何实际区别。)

您可以从该文件中的任何位置访问它,但因为它是
私有的
,所以它对任何其他文件中的代码都不可见