今天學到關於 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 了,系統都會自動幫你處理好!