やること
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
補足
名前を付けた場合も()
で囲むやり方は機能します。