【问题标题】:Kotlin: Evaluation of getter-/setter-methodsKotlin:getter/setter 方法的评估
【发布时间】:2020-09-19 06:21:39
【问题描述】:

我有以下示例类:

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 从哪里知道,它实际上必须调用哪个 setter 方法?

我的课程中有两个 setter 方法(速度、价格),都被命名为“set”,需要一个整数值。

定义方法的顺序是否重要?

相应的getter-/setter-methods必须直接写在属性定义之后?还是它的工作方式有所不同?如果是:如何?

缩进只是约定吗?还是编译器需要缩进?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    car.speed = 65 称为属性访问语法。相当于car.setSpeed(65)

    您没有两个名为 set 的方法;你有两个可变属性speedprice 都是Int 类型。它们都有对应的getter和setter方法;在 Java Beans 约定中,speed 的 getter 是 getSpeed,setter 是 setSpeed(Int)

    更多详情请见https://kotlinlang.org/docs/reference/properties.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多