Skip to content

Instantly share code, notes, and snippets.

@yongjhih
Created October 22, 2024 04:55
Show Gist options
  • Save yongjhih/c3bd3861a04d67389df046415bbb2db3 to your computer and use it in GitHub Desktop.
Save yongjhih/c3bd3861a04d67389df046415bbb2db3 to your computer and use it in GitHub Desktop.
fun <T: Any> byAtomic(initialValue: T) = object : ReadWriteProperty<Any?, T> {
val ref = AtomicReference(initialValue)
override fun getValue(thisRef: Any?, property: KProperty<*>): T = ref.get()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = ref.set(value)
}
fun <T: Any?> byAtomic(initialValue: T? = null) = object : ReadWriteProperty<Any?, T?> {
val ref = AtomicReference<T?>(initialValue)
override fun getValue(thisRef: Any?, property: KProperty<*>): T? = ref.get()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) = ref.set(value)
}
fun byAtomicBoolean() = object : ReadWriteProperty<Any?, Boolean> {
val ref = AtomicBoolean()
override fun getValue(thisRef: Any?, property: KProperty<*>): Boolean = ref.get()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Boolean) = ref.set(value)
}
fun byAtomicInt() = object : ReadWriteProperty<Any?, Int> {
val ref = AtomicInteger()
override fun getValue(thisRef: Any?, property: KProperty<*>): Int = ref.get()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) = ref.set(value)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment