クラスを継承することなく、あれこれ関数を追加することができます。
使い方は
fun クラス名.関数() : 型 {
thisとして変数(クラス)を使用
}
or
fun fun クラス名.関数() = 簡単な処理
ただし、関数の付け足しはできるがプライベートメンバにアクセスすることはできない。
class AquariumPlant(val color: String, private val size: Int)
fun AquariumPlant.isRed() = color == "red" // OK
fun AquariumPlant.isBig() = size > 50 // gives error
⇒ error: cannot access 'size': it is private in 'AquariumPlant'
(引用 : Kotlin Bootcamp for Programmers 5.1: Extensions 5. Task: Write extensions)
拡張関数が生成されるタイミングはコンパイル時に指定の型に沿って生成される。
また、nullチェックはした方が良い
fun クラス?.関数名 {
this?.apply{ 処理 }
}
拡張関数と同様にメソッドも拡張できる。
fun クラス名.変数名 : 型
get() = 代入するもの