我正在使用 Kotlin 原生库对象在 Kotlin 中工作,该对象包含一个方法,其.nameIsMuchTooLongAndIsStillNotClear
. 以类似于 的方式typealias
,我想为该方法创建一个别名,因此我可以将其称为 something .shortAndClear
。为了使事情稍微复杂化,这些函数有几个参数,其中许多具有我不希望在包装器中预处理的默认值。经过进一步研究,似乎扩展功能仍然是要走的路。
要使用一个易于测试的示例函数,假设我想为其创建一个别名类型的扩展String.startsWith
名为String.beg
. 我可以轻松获得以下解决方案:
inline fun String.beg(prefix: CharSequence, ignoreCase: Boolean = false) = startsWith(prefix, ignoreCase) // works ok
但是,这似乎要求我列出所有参数及其默认值,并且对每个重载都这样做。(有问题的真正方法签名要长得多,有更多的默认值。)本着“不要重复自己”的精神,有没有一种方法可以使用函数引用,String::startsWith
这样我就不必枚举所有参数? 我尝试了几种形式,但它们都不起作用:
// none of these work:
fun String.beg = String::startsWith
fun String.beg = this::startsWith
val String.beg: (CharSequence, Boolean) -> Boolean = String::startsWith