我想用构造函数声明类,但似乎有与该语法冲突并声明类成员。类构造函数和成员变量(字段)
任何建议这些如何一起?
class Person (aName:String) {
var name : String
get() = this.name
set(myName) {this.name = myName}
init {
this.name = aName
}
}
我想用构造函数声明类,但似乎有与该语法冲突并声明类成员。类构造函数和成员变量(字段)
任何建议这些如何一起?
class Person (aName:String) {
var name : String
get() = this.name
set(myName) {this.name = myName}
init {
this.name = aName
}
}
您使用的setter您的setter里面做set(myName) {this.name = myName}
。这是一个递归调用,而不是你应该做的。而是使用field
accessor这样的:
name: String? = null
set(myName) {
field = myName
}
但实际上,你甚至不需要这个。你可以在主构造函数声明,即name
应该是你的类的属性:
class Person(var name: String)
为什么在第一个示例中名称为Optional? – AjahnCharles
你不需要这些。您可以在构造函数中将name
定义为var
,Kotlin会将其作为属性公开。
class Person(var name: String)
// Usage...
val p = Person("Dave")
println(p.name) // "Dave"
p.name = "Phil"
println(p.name) // "Phil"
是的,我对能见度,吸气者和制定者很困惑。与java规则相比,你直接向成员发送消息,但是还有setter和getter,这使得成员的可见性对我来说更加令人困惑。 –
我想补充一下已经被别人说,这里是一个更好的语法,如果你想拥有aName
作为一个单独的构造函数参数:
class Person (aName:String) {
var name = aName
}
难道你不能只声明名称为var? –