やること
companion objectに定義された関数への参照(method reference)を取得します。
これは単純にHoge::fugaと書いても取得できません。
やり方
クラス名を()で囲むやり方とcompanion objectの名前から取得するやり方を紹介します。
基本的には()で囲むやり方でよいと思います。
クラス名を()で囲む
// 取得対象クラス
class SampleClass {
companion object {
fun temp(piyo: SampleEnum): String = piyo.name
}
}
// 取得方法
val func: KFunction<String> = (SampleClass)::temp
名前から取得する
コンパニオンオブジェクトにはデフォルトでCompanionという名前が付いているので、そこから取得することができます。
// 取得対象クラス
class SampleClass {
companion object {
fun temp(piyo: SampleEnum): String = piyo.name
}
}
// 取得方法
val func: KFunction<String> = SampleClass.Companion::temp
コンパニオンオブジェクトに名前を付けた場合は、Companionを付けた名前に置き換えれば同様に取得できます。
// 取得対象クラス
class SampleClass {
companion object Hoge {
fun temp(piyo: SampleEnum): String = piyo.name
}
}
// 取得方法
val func: KFunction<String> = SampleClass.Hoge::temp
補足
名前を付けた場合も()で囲むやり方は機能します。