0
0
mirror of https://github.com/tursom/TursomServer.git synced 2025-04-26 13:01:22 +08:00

add README

This commit is contained in:
tursom 2022-01-26 23:40:32 +08:00
parent bc560c9232
commit 40801d52fb
4 changed files with 22 additions and 1 deletions
ts-core/ts-delegation

View 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`就会将监听器的具体调用放到线程池里执行。

View File

@ -0,0 +1,5 @@
package cn.tursom.core.delegation
interface DefaultDelegatedFieldAttachmentKey<V> : DelegatedFieldAttachmentKey<V> {
val default: V
}

View File

@ -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)

View File

@ -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)
}
}