Class 类构造函数和成员变量(字段)

Class 类构造函数和成员变量(字段),class,variables,constructor,kotlin,Class,Variables,Constructor,Kotlin,我试图用构造函数声明类,但似乎与该语法和声明类成员有冲突 有什么建议如何配合这些 class Person (aName:String) { var name : String get() = this.name set(myName) {this.name = myName} init { this.name = aName } } 你不需要这些。您可以在构造函数中将name定义为var,Kotlin将其作为属性公开

我试图用构造函数声明类,但似乎与该语法和声明类成员有冲突

有什么建议如何配合这些

class Person (aName:String) {
    var name : String
        get() = this.name
        set(myName) {this.name = myName}

    init {
        this.name = aName
    }
}

你不需要这些。您可以在构造函数中将
name
定义为
var
,Kotlin将其作为属性公开

class Person(var name: String)

// Usage...
val p = Person("Dave")
println(p.name) // "Dave"
p.name = "Phil"
println(p.name) // "Phil"

您通过执行
set(myName){this.name=myName}
在setter中使用setter。这是一个递归调用,不是您应该做的。相反,请使用以下方法:

name: String? = null
  set(myName) {
     field = myName
  } 
但实际上,你根本不需要这个。您可以在主构造函数中声明
name
应该是类的属性:

class Person(var name: String) 

为了补充其他人所说的内容,如果您想将
aName
作为单独的构造函数参数,这里有一个更好的语法:

class Person (aName:String) {
    var name = aName
}

难道你们不能把这个名字声明为var吗?是的,我对可见性、getter和setter很困惑。与java规则相比,您直接处理成员,但是存在setter和getter,这使得成员可见性更让我困惑,为什么在第一个示例中您将名称设置为可选的?