kotlinでは()を使ってインスタンスを作成します。例えばMyClassという名前のクラスをインスタンスにする場合は下記のように記述します。

val myInstance = MyClass()

しかし初期化方法が複雑化してきたりすると下記のようにstaticな関数を用意することが多いと思います。

class MyClass {
    lateinit var str: String 
    companion object {
        fun createInstance(str: String): MyClass {
            val myInstance = MyClass()
            myInstance.str = str
            return myInstance
        }
    }
}
fun main() {
    val myInstance = MyClass.createInstance("aiueo")
    print(myInstance.str)
}

https://pl.kotl.in/SSo3QMwLe

これはこれで良いのですが、MyClassを使う側の人はMyClassにcreateInstanceという関数が存在してそれを使って初期化をするというMyClassの実装を意識しないといけません。MyClassを使う側の人にとっては読むコードの量が多くなるのであまり良いことではありません。こういう時にoperator fun invoke()を利用します。

class MyClass {
    lateinit var str: String 
    companion object {
        operator fun invoke(str: String): MyClass {
            val myInstance = MyClass()
            myInstance.str = str
            return myInstance
        }
    }
}
fun main() {
    val myInstance = MyClass("aiueo")
    print(myInstance.str)
}

https://pl.kotl.in/l3-R7NU9n

このように書くとcreateIntanceと同じ機能を実装可能です。多くの高級言語ではクラス名()でクラスをインスタンス化するので、MyClassのcreateInstanceが生えているという実装の中身を知らなくてもMyClass()でインスタンス化できます。引数はAndroid StudioやIDEを使っていると保管されて引数にstr: Stringが必要なことが表示されるため、実装を間違える可能性は低いです。

operator fun invoke()の使いみちは色々ありますが、Fragmentの生成やViewHolderの生成等にも利用可能です。Fragmentの例を下記に置いておきます。

MyClassclass MyFragment : Fragment() {
    companion object {
        const val queryKey = "query"
        const val isSystemApplicationKey = "is_system_application"
        operator fun invoke(param: Param?): MyFragment =
                MyFragment().apply {
                    val bundle = Bundle().also { b ->
                        param?.let { p ->
                            b.apply {
                                putString(queryKey, p.query)
                                putBoolean(isSystemApplicationKey, p.isSystemApplication)
                            }
                        }
                    }
                    this.arguments = bundle
                }
    }
}

operator fun invoke()という見た目は一瞬意味がわからないのですが、()を置き換える役目なので使ってみてはいかがでしょうか。