【发布时间】:2019-11-15 13:05:52
【问题描述】:
是否可以在类的伴生对象中定义和使用扩展函数?
在此示例中,removePadding() 是 Point.parse() 中使用的扩展函数。
data class Point(private var x: Int, private var y: Int) {
companion object {
fun parse(text: String?) = text?.removePadding()
?.let { "(\\d+),(\\d+)".toRegex().find(it) }
?.mapNotNull { it.toIntOrNull() }
?.let { Point(it[0], it[1]) }
// define removePadding() here?
}
// define removePadding() here?
}
扩展函数removePadding() 可能如下所示:
fun String.removePadding() = this.replace("\\s+".toRegex(), "")
而parse 函数可以这样调用:
val one = Point.parse("1, 7")
如果可能,怎么做?如果不是,为什么不呢?
【问题讨论】:
-
既然它应该是
String的扩展函数,它不应该在data class之内,而是在范围之外。我还认为replace("\\s#")无法编译,您没有为任意数量的空格提供替换String。