如何更好地将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 = { ... }
...
}
那么最好使用哪种解决方案?
答案 0 :(得分:3)
如果您打算使用第二种方法,为什么不直接使用这种类型的方法?似乎TheWeapon
可以提供lambda本身并且不将其作为参数,因此您可以将代码从lambda移动到抽象函数:
abstract class Weapon {
abstract fun someFunction()
}
class TheWeapon : Weapon() {
override fun someFunction() { ... }
}
如果TheWeapon
通过其构造函数从外部源接收lambda,那么你必须采用另一种方式,并且Weapon
也将lambda作为构造函数参数。