Skip to content

Instantly share code, notes, and snippets.

@green-nick
Created September 28, 2022 13:07
Show Gist options
  • Save green-nick/33fdcb525d65e2b5124ea8d713f7c923 to your computer and use it in GitHub Desktop.
Save green-nick/33fdcb525d65e2b5124ea8d713f7c923 to your computer and use it in GitHub Desktop.
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
fun <T> threadLocal(init: () -> T) = object : ReadWriteProperty<Any?, T> {
private val internal = object : ThreadLocal<T>() {
override fun initialValue() = init()
}
override fun getValue(thisRef: Any?, property: KProperty<*>): T = internal.get()!!
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
internal.set(value)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment