【发布时间】:2017-04-10 14:02:23
【问题描述】:
我刚开始学习 kotlin,正在努力理解高阶函数如何确定类型,我经常看到这种错误
错误:类型不匹配:推断类型为 KFunction2 但 (String) -> 应为单位
以上错误是由以下原因引起的
class MyClass(private val valueChangeListener: MyValueChangeListener, public val storage: MyStorage): MySuperClass {
fun saveValue(potentialValue: String) {
super.processValue(potentialValue, MyClass::save)
}
fun save(value: String){
storage.storeValue(value)
valueChangeListener.onValueChanged(value)
}
}
但是如果我使用 Lambda 一切都解决了
class MyClass(private val valueChangeListener: MyValueChangeListener, public val storage: MyStorage): MySuperClass {
fun saveValue(potentialValue: String) {
super.processValue(potentialValue, super.processValue(potentialValue, { value: String ->
save(value)
})
}
fun save(value: String){
storage.storeValue(value)
valueChangeListener.onValueChanged(value)
}
}
MySuperClass
open class MySuperClass {
private fun cleanseValue(value: String) : String {
return value.toUpperCase().replace(" ", "").replace("-", "")
}
protected fun processValue(potentialValue: String, saveFunction: (String) -> Unit){
saveFunction(cleanseValue(potentialValue))
}
}
【问题讨论】: