#kotlin
#kotlin
Вопрос:
У меня есть следующий пример класса:
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
}
}
Когда я меняю атрибут скорости (см. Строку с комментариями): откуда Kotlin знает, какой метод установки он должен фактически вызывать?
В моем классе есть два метода установки (скорость, цена), которые оба называются «set» и оба ожидают целочисленного значения.
Имеет ли решающее значение порядок, в котором определены методы?
Соответствующие методы получения / установки должны быть записаны непосредственно после определения атрибута? Или это как-то работает по-другому? Если да: как?
Являются ли отступы просто соглашением?Или отступы необходимы для компилятора?
Ответ №1:
car.speed = 65
называется синтаксисом доступа к свойствам. Это эквивалентно car.setSpeed(65)
.
У вас нет двух названных методов set
; у вас есть два изменяемых свойства speed
, и price
оба типа Int
. У каждого из них есть соответствующие методы получения и установки; в соглашении Java Beans получателем для speed
будет getSpeed
и установщик setSpeed(Int)
.
См. https://kotlinlang.org/docs/reference/properties.html для получения более подробной информации.