Kotlin / Java Extension Function (Properties)

換一種思維提升程式碼閱讀與擴展性

Bruce Hsu
10 min readApr 10, 2023

前言

最近工作在專案上看到大量使用,有鑒於在 Kotlin 上有一些小研究,先把 Kotlin 的一些概念,加上 Java 如何實現一樣的做法來做一些紀錄。

什麼是 Extension Function

Extension Function 跟我們傳統在物件導向上的 class 繼承概念不太一樣,而是在物件內擴展 methods 以及 fields,不必透過繼承物件或是什麼華麗的 design pattern 的方式來達成。

透過這類的操作,可以較優雅的將 methods 擴展組合,更好的將以往的 method 復用提高。

簡單的情境 DEMO

先來看看我們的一開始範例,我們有一個 Product 物件,以及 Sales 需要販賣這個 Product

class Product(val name: String, val amount: BigDecimal) {}

class Sales {
fun sale(name: String): Product {
return getFromStorage(name)
}

private fun getFromStorage(name: String): Product {
return findProductByName(name)
}
}

基本的感覺就是,當我今天需要在販賣前檢查客戶的錢付得夠不夠,直覺來說就是直接寫在販賣的邏輯裡,要程式乾淨點,或許會使用 utils 封裝起來

fun saleSomething(productName: String, payment: BigDecimal) {
// sales
val sales = Sales()
// warehourse staff
val warehouseStaff = WarehouseStaff(ProductRepository())

val product = warehouseStaff.findProductByName(productName)
if (SaleUtils.checkPaymentIsSufficient(product, payment = payment)) {
sales.sale(productName)
}
}

object SaleUtils {
fun checkPaymentIsSufficient(product: Product, payment…

--

--

Bruce Hsu

I'm a Java engineer, eager to learn new skills, technique and willing to take challenges.