我想用構造函數聲明類,但似乎有與該語法衝突並聲明類成員。類構造函數和成員變量(字段)
任何建議這些如何一起?
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? –