Kotlin in Action 5章 `fun interface`

関数型インターフェイス

関数型インターフェイスは

  • 1つの抽象メソッド
  • 複数の追加の非抽象メソッド 含みます。
fun interface IntCondition {
    fun check(i : Int) : Boolean
    fun checkstring(s: String) = check(s.toInt())
    fun checkChar(c: Char) = check(c.digitToInt())
}

fun main() {
    val isOdd = IntCondition { it % 2 != 0 }
    println(isOdd.check(1))
    // true
    println(isOdd.checkstring("2"))
    // false
    println(isOdd.checkChar('3'))
    // true
}

IntCondition interfaceにラムダを渡すことで、抽象メソッドを実装できます。

fun checkCondition(i: Int, condition: IntCondition): Boolean {
    return condition.check(i)
}

fun main() {
    checkCondition(1) { it % 2 != 0 }
    // true
    val isOdd: (Int) -> Boolean = { it % 2 != 0 }
    val isEven: (Int) -> Boolean = { it % 2 == 0 }
    checkCondition(1, isOdd)
    // true
    checkCondition(1, isEven)
    // false
}

の両方のパターンができます。複数、「条件」自体をインスタンス化することができました。 インスタンス化するときに型を明示的に書いているのですが、ラムダのitInt型で、その評価がBoolean型であることから、このようなSyntaxを書く必要があります。

fun interfaceに関数型インターフェイスを定義できます。