抽象クラスを利用するときに新しいクラスをわざわざ作るのが面倒・・・
抽象クラスやインターフェースの機能を利用したいけど、わざわざ継承して新しいクラスを作るのが面倒なときってありますよね。
そんな時に使えるのが無名クラスです。ここでは無名クラスの定義方法を解説します。
目次
インターフェース・抽象クラスで無名クラスを利用する
インタフェースを実装する
例えば、インタフェースのComparatorを実装する場合は次のようになります。
他にも、Runnableなどにも使えると思います。
val compare = object: Comparator<Int> {
override fun compare(o1: Int?, o2: Int?): Int {
o1 ?: throw IllegalArgumentException("o1 must not be null.")
o2 ?: throw IllegalArgumentException("o2 must not be null.")
return o1 - o2
}
}
抽象クラスを継承する
JavaFXのAnimationTimerを使いたい時、わざわざクラスを定義して継承するのは面倒です。
この場合もobject式を使って簡単に定義することができます。
val timer = object : AnimationTimer() {
override fun handle(now: Long) {
update()
}
}
object式ってとっても便利ですね!
参考
Java言語が長かった人には特におすすめ。というかKotlinやるならこれを読まないと損します。
メイン言語がJavaの方でこれからKotlinを学習するならまずはこの書籍。これ以上最適は書籍はないといっても過言ではありません。Javaの記述がKotlinだとこう書ける!を丁寧に解説。