Kotlin: コンストラクタ呼び出しっぽく関数やcompanion objectを使う

KotlinではJavaと異なり、コンストラクタ呼び出しの時にnewキーワードが必要ありません。

class A
...
val a = A()

よって、次のように関数をコンストラクタのように使うことが出来ます。

// Coroutine Jobの定義
@Suppress("FunctionName")
public fun Job(parent: Job? = null): Job = JobImpl(parent)
...
val job = Job()

また、次のようにcompanion object + operator invokeを使うことも出来ます。

// ref: https://github.com/JakeWharton/retrofit2-kotlin-coroutines-adapter
class CoroutineCallAdapterFactory private constructor() : CallAdapter.Factory() {
  companion object {
    @JvmStatic @JvmName("create")
    operator fun invoke() = CoroutineCallAdapterFactory()
  }
}
...
val factory = CoroutineCallAdapterFactory()

まとめ

Written by