在Kotlin中,可以在这样的接口中声明扩展功能:
interface Evaluator {
fun Double.evaluateY1(): Double
fun Double.evaluateY2(): Double
}
class EvaluatorImpl : Evaluator {
override fun Double.evaluateY1(): Double {
return this + 2.0
}
override fun Double.evaluateY2(): Double {
return this + 3.0
}
}
具有接收器和接口实例,如何调用此类扩展功能?
我想出了一个涉及with
范围函数的技巧,但是我更喜欢缩进较少的东西。
fun usageExample(evaluator: Evaluator, x: Double) {
with(evaluator) {
println("Y1 = ${x.evaluateY1()}. Y2 = ${x.evaluateY2()}")
}
}
答案 0 :(得分:3)
如果不进入界面范围,就没有机会使其正常工作。建议使用with
。您可以使用表达式主体使其更简洁:
fun usageExample(evaluator: Evaluator, x: Double) = with(evaluator) {
println("Y1 = ${x.evaluateY1()}. Y2 = ${x.evaluateY2()}")
}