Kotlin lambda参数与抽象值

时间:2018-03-28 16:35:49

标签: lambda kotlin readability

如何更好地将lambda函数传递给用作父类的类:将其作为参数传递或在pasrent类中将其定义为抽象lambda,然后在子类中覆盖它?

将其作为参数传递:

open class Weapon(val someFunction: () -> Unit) {
    ...
}

class TheWeapon() : Weapon({ ... }) {
    ...
}

或者定义它以在pasrent类中将其定义为抽象lambda,然后在子类中覆盖它:

abstract class Weapon() {
    abstract val someFunction: () -> Unit;
    ...
}

class TheWeapon() : Weapon() {
    override val someFunction: () -> Unit = { ... }
    ...
}

那么最好使用哪种解决方案?

1 个答案:

答案 0 :(得分:3)

如果您打算使用第二种方法,为什么不直接使用这种类型的方法?似乎TheWeapon可以提供lambda本身并且不将其作为参数,因此您可以将代码从lambda移动到抽象函数:

abstract class Weapon {
    abstract fun someFunction()
}

class TheWeapon : Weapon() {
    override fun someFunction() { ... }
}

如果TheWeapon通过其构造函数从外部源接收lambda,那么你必须采用另一种方式,并且Weapon也将lambda作为构造函数参数。