mirror of
https://github.com/tursom/TursomServer.git
synced 2025-04-26 13:01:22 +08:00
add README
This commit is contained in:
parent
bc560c9232
commit
40801d52fb
ts-core/ts-delegation
README.md
src/main/kotlin/cn/tursom/core/delegation
12
ts-core/ts-delegation/README.md
Normal file
12
ts-core/ts-delegation/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
ts-delegation 是使用kotlin的 [属性委托](https://www.kotlincn.net/docs/reference/delegated-properties.html) 语法实现的一个属性委托库。其使用
|
||||
|
||||
其核心接口为 `DelegatedField` 与 `MutableDelegatedField`。这两个接口分别定义了实现属性委托的 getter 与 setter,具体方法分别如下表:
|
||||
|
||||
| 类 | 方法 |
|
||||
|:---------------------:|:-------------------------------------------------------------------:|
|
||||
| DelegatedField | operator fun getValue(thisRef: T, property: KProperty<*>): V |
|
||||
| MutableDelegatedField | operator fun setValue(thisRef: T, property: KProperty<*>, value: V) |
|
||||
|
||||
`setValue` 的默认实现会先调用 `valueOnSet(thisRef, property, value, getValue())` 后 调用 `setValue(value)`
|
||||
,这是由这两个函数的功能决定的。`fun setValue(value: V)` 则负责值的具体设置实现,而函数 `valueOnSet` 负责监视设置属性事件的实现。将 `valueOnSet`
|
||||
独立出的原因是一些功能需要独立的方法实现,比如负责异步执行的实现`ExecutorMutableDelegatedField`就会将监听器的具体调用放到线程池里执行。
|
@ -0,0 +1,5 @@
|
||||
package cn.tursom.core.delegation
|
||||
|
||||
interface DefaultDelegatedFieldAttachmentKey<V> : DelegatedFieldAttachmentKey<V> {
|
||||
val default: V
|
||||
}
|
@ -27,6 +27,9 @@ interface DelegatedField<in T, out V> {
|
||||
null
|
||||
}
|
||||
|
||||
operator fun <K> get(key: DefaultDelegatedFieldAttachmentKey<K>): K =
|
||||
get(key as DelegatedFieldAttachmentKey<K>) ?: key.default
|
||||
|
||||
operator fun <V> set(key: DelegatedFieldAttachmentKey<V>, value: V): Boolean =
|
||||
if (this is DecoratorDelegatedField<*, *>) {
|
||||
delegatedField.set(key, value)
|
||||
|
@ -5,4 +5,5 @@ import kotlin.reflect.KProperty0
|
||||
interface DelegatedFieldAttachmentKey<V> {
|
||||
operator fun get(delegatedField: DelegatedField<*, *>) = delegatedField[this]
|
||||
operator fun get(property0: KProperty0<*>) = property0.getDelegatedAttachmentValue(this)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user