
Kotlin
委托
|
141
具体的实现将在示例 8-14 中展示。observable 函数使一个对象继承了 Observable-
Property 并且覆盖了 afterChange 函数以执行 onChange lambda 表达式指定的操
作。由于它不会覆盖 beforeChanged 函数,因此该函数仅返回 true,从而确保将
更新属性。
另一方面,vetoable 函数还从继承自 ObservableProperty 的类中创建一个对象,
但是在这种情况下,仅 beforeChanged 函数被覆盖。该 lambda 表达式实现作为参数
提供,它必须返回一个布尔值,该布尔值确定是否将更改属性。
同样,创建 ObservableProperty 类以实现 ReadWriteProperty 接口的工作以及
附加的生命周期方法使实现 Observable 与 veveable 函数变得轻而易举。
inline
与
crossinline
inline 关键字将告知编译器避免仅仅为了调用这个函数而创建一个完整的新对象,
而是将实际的源代码替换到调用处。
有时,将内联函数作为参数传递给 lambda 表达式,这些参数需要从另一个上下文
(例如本地对象或嵌套函数)中执行。这样的“非本地”控制流在 lambda 表达式中
是不允许的。在所示示例中,onChange lambda 表达式是相对于 observable 或
vetoable 函数执行的,而不是与继承 ObservableProperty 的类有关的 ...