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
}
の両方のパターンができます。複数、「条件」自体をインスタンス化することができました。
インスタンス化するときに型を明示的に書いているのですが、ラムダのitがInt型で、その評価がBoolean型であることから、このようなSyntaxを書く必要があります。
fun interfaceに関数型インターフェイスを定義できます。
Inuverse Sci. X Tech. Blog