示例如下:
在类中声明
class User {
private val greeting = "Hello, World!"
}
在类外声明
private val greeting = "Hello, World!"
答案 0 :(得分:1)
这归结为一个事实,即 Kotlin 允许您创建的文件不包含类,而只包含“顶级”声明。查看他们的userguide。
或者,换句话说:
<块引用>顶级声明是在任何类、对象、接口或其他结构之外定义的函数或属性。
(来自here)
因此:存在根本区别。您的第一个示例是仅存在于该类范围内的字段。另一个是一个很好的模块范围的私有变量。
答案 1 :(得分:1)
在 class
中声明的属性是该类的一部分。这意味着类的每个实例都有自己的属性版本,与其他实例分开。 (相反,如果您从不创建类的任何实例,则任何地方都没有该属性的 版本。)
因为它是private
,你只能从类中访问它;任何其他代码都看不到它。
在这种情况下,因为它是一个带有常量初始化器的 val
,所以每个实例都会得到对同一个字符串的引用,所以你可能会认为它有点无意义。但它仍然是限制对属性的访问的好方法,并使任何阅读它的人都能清楚地看到它与类的联系。
在类外声明的属性是顶级属性。这属于包,是 Kotlin 最接近全局的东西。 正是其中之一。 (因此 User
的每个实例都将引用 same greeting
— 不过,同样,因为它是一个带有常量初始化器的 val
,因此不会产生任何在这种情况下的实际差异。)
您可以从该文件的任何位置访问它,但由于它是 private
,因此无法在任何其他文件中进行编码。