我有以下示例类:
fun main(args: Array<String>) {
var car = Car("Ford", 50, 8000)
println(car.vendor)
println("Speed: ${car.speed}")
car.speed = 65 // How does it know which setter to invoke?
println("New speed: ${car.speed}")
}
class Car(vendor: String = "Unknown", speed: Int = 0, price: Int = 0) {
var vendor = vendor
get() = field
set(newVendor: String) {
field = newVendor
}
var speed = speed
get() = field
set(speed: Int) {
field = speed
}
var price = price
get() = field
set(newPrice: Int) {
field = price
}
}
当我更改速度属性时(请参阅注释行):科特林从哪里知道,实际上需要调用哪种设置方法?
我班上有两种设置方法(速度,价格),两者都被命名为“ set”,两者都期望有整数值。
定义方法的顺序是否至关重要?
必须在属性定义之后直接编写相应的getter / setter方法?还是以某种方式有所不同?如果是这样:如何?
缩进只是一个缩影?还是编译器需要缩进?
答案 0 :(得分:3)
car.speed = 65
被称为属性访问语法。它等效于car.setSpeed(65)
。
您没有两个名为set
的方法;您有两个speed
类型的两个可变属性price
和Int
。它们每个都有对应的getter和setter方法。在Java Beans约定中,speed
的getter将是getSpeed
,而setter的setSpeed(Int)
是。
有关更多详细信息,请参见https://kotlinlang.org/docs/reference/properties.html。