Kotlin: оценка методов получения / установки

#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 для получения более подробной информации.