Kotlin: コンストラクタ呼び出しっぽく関数やcompanion objectを使う
Created at Tue, Mar 19, 2019Kotlinでは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()
まとめ
- JobImplのような実装クラスを隠したいときに便利