Kotlin Getter/Setter 跟 Java 比較

Posted by 大頭雜七雜八 on Thursday, March 18, 2021

今天學到關於 kotlin 怎麼為變數新增 getter/setter 的方式,不得不說,真的跟 Java 比起來天差地遠,先上比較圖

Java 原版 Getter/Setter

public class GetterSetter {

    private String hello;


    public String getHello() {
        return hello;
    }

    public GetterSetter setHello(String hello) {
        this.hello = hello;
        return this;
    }
}

透過 Lombok 幫忙後的 Code

public class GetterSetter {

    @Getter
    @Setter
    private String hello;

}

這都是熟悉的 Java getter/setter,可以看到如果沒有 lombok 的幫忙,一個 class 中會充滿一堆沒有意義的 getter/setter method,像一篇廢話一堆,而重點不過就那幾個的文章。

當然,有了 lombok 的幫助後,確實可以幫助你節省程式碼, 然而今天若要在 set value 時加上一點偵測,例如一些參數的轉換…等, 難免需要自己手刻 setter,表面上聽起來沒什麼不好,不過是一個 method 而已, 但請你想一想,如果今天這個 class 很大,這個 setter method 是不是得要被排到很後面的地方? 當然這影響可能沒有很大,然而在 Kotlin,你可以用更快、更一目了然的方式完成這個東西!

一樣,先上 Code

class SetterExample(name: String) {

    var name: String = name
        get() = name
        set(value) {
            field = value
        }

}

可以看到,Kotlin 的 Getter/Setter 與 Java 有兩點很大的不同:

  • get set 直接定義在變數下方,不用額外寫一個 method,看 code 時一目了然這個變數可以怎麼設定、怎麼存取
  • 如果今天沒有寫任何 getter setter,Kotlin 會自動幫你創一個 (等於說,Kotlin 不允許你直接存取變數,一定要透過 getter 來獲取, 只是預設的 getter 沒有任何邏輯,所以看起來才會像是直接存取)

比起 Java 還需要自己寫 getter/setter,Kotlin 這種寫法不但因為更直觀而大幅增加可讀性, 也不用自己用 lombok 去設定 getter setter 了,系統都會自動幫你處理好!