2015-09-17

Kotlinことはじめ:(11)既存クラスを拡張する

Kotlinでは、継承など使用せずに既存のクラスを拡張することができます。

拡張関数

次のように書くことで、既存のクラスに関数を追加する事ができます。

[スコープ] fun クラス名.関数名([仮引数...]) {

    処理

}
ただし、既存のクラスに既に同じシグネチャの関数が存在する場合には、既存の関数を置き換えるようなことはできません。
既存のクラスのオブジェクトは、thisとしてアクセスできます。

fun String?.isBlank():Boolean {

    return this == null || this.length() == 0 || this == " "

}
このようにNullableなクラスにも関数を追加できます。
また、次のように、ジェネリックなクラスに対して、特定の型引数を指定した場合に限定して、関数を追加することもできます。

fun List<String?>.shrink(): List<String?> {
    return this.filter({value -> !value.isBlank()})
}

拡張プロパティ

プロパティも関数と同様に追加可能です。

val クラス名.プロパティ名: 型
    get() {

        処理

    }

拡張のスコープ

拡張関数や拡張プロパティはパッケージ直下に作ることになるので、そのパッケージ内では自由に使用できます。
ほかのパッケージで使用するには、拡張を実装しているパッケージをインポートする必要があります。

0 件のコメント: