[毎日Kotlin] Day11. Object expressions(オブジェクト式)
はじめに
毎日Kotlinシリーズです。
このシリーズを初めての方はこちらです。「毎日Kotlin」はじめました | Developers.IO
問題
Object expressions | Try Kotlin
Kotlinで無名クラスをつくってみよう。
Read about object expressions that play the same role in Kotlin as anonymous classes in Java.
Add an object expression that provides a comparator to sort a list in a descending order using java.util.Collections class. In Kotlin you use Kotlin library extensions instead of java.util.Collections, but this example is still a good demonstration of mixing Kotlin and Java code.
import java.util.* fun getList(): List<Int> { val arrayList = arrayListOf(1, 5, 2) Collections.sort(arrayList, object {}) return arrayList }
狙い
ここで考えて欲しい問題の意図はなんだろうか?
object式をつかうと無名クラスを作ることができます。たとえば、引数の型がinterfaceになっていて、「1回しかつかわないのに、わざわざクラスを作るの面倒だな」というときに便利です。
解答例
import java.util.* fun getList(): List<Int> { val arrayList = arrayListOf(1, 5, 2) Collections.sort(arrayList, object : Comparator<Int> { override fun compare(x: Int, y: Int) = y - x }) return arrayList }
補足
無名クラスの作成なので、継承、実装が必要じゃないときでも使えます。
Object Expressions, Object Declarations and Companion Objects - Kotlin Programming Languageより
fun foo() { val adHoc = object { var x: Int = 0 var y: Int = 0 } print(adHoc.x + adHoc.y) }
あとがき
SAM変換でいいのでは?っと思った方、Day12.でまたお会いしましょう。