Kotlin
オブジェクト指向

KotlinにおけるSetterのOverload


KotlinにおけるSetterのOverload


投稿の経緯


  • Kotlinにおけるプロパティとアクセサの記述


Model.kt

  // 単位はInch

var height : Int
get() {
println("heightのGetterが呼ばれました")
return field
}
set(inches : Int) {
println("heightのSetterが呼ばれました")
field = inches
}



  • 単位がInchのheightに、FeetとInchesの2つの引数をもつSetterをOverloadしなさい、と言われたとき


    • こうしたくなるけどsetの行で構文エラー(環境はIntelliJ 2018.2.4)


    Model.kt

    // 単位はInch
    
    var height : Int
    get() {
    println("heightのGetterが呼ばれました")
    return field
    }
    // 構文エラー(feet : Intの後のカンマのところで"Expecting ')'"と怒られる)
    set(feet : Int, inches : Int) {
    println("heightのSetterが呼ばれました")
    field = inches
    }



-> Kotlinのインスタンス変数定義において、Setterの引数は1つしか取れない!


では、どうすべきか


  • 結論から示すとこう


Model.kt

  // 単位はInch

var height : Int
get() {
println("heightのGetterが呼ばれました")
return field
}
set(inches : Int) {
println("heightのSetter1が呼ばれました")
field = inches
}

fun setHeight(feet : Int, inches : Int) {
println("heightのSetter2が呼ばれました")
this.height = 12 * feet + inches
}



  • かゆいところに手が届かなかった。。


  • ちなみにこう書くとこう怒られます(画像ですみません)


Screen Shot 2018-10-14 at 9.40.25 AM.png


  • "setプロパティ名"のSetterメソッドが暗黙的に宣言されていることが分かって安心しました。読んでくださりありがとうございます!