Package com.github.phantomthief.scope
Class ScopeKey<T>
java.lang.Object
com.github.phantomthief.scope.ScopeKey<T>
强类型数据读写的封装
如果多个线程共享了一个Scope,那么他们对于ScopeKey的get/set调用是操作的同一个值,这一点和ThreadLocal不一样,ThreadLocal 每个线程总是访问自己的一份变量。
因而,ScopeKey也不能在所有场合都无脑替换ThreadLocal。
更多信息参考 Scope的文档。
- Author:
- w.vela
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> ScopeKey<T> allocate()get()booleanwithDefaultValue(boolean defaultValue) withDefaultValue(double defaultValue) withDefaultValue(int defaultValue) withDefaultValue(long defaultValue) withDefaultValue(String defaultValue) withDefaultValue(T defaultValue) static <T> ScopeKey<T> withInitializer(boolean enableNullProtection, Supplier<T> initializer) static <T> ScopeKey<T> withInitializer(Supplier<T> initializer)
-
Method Details
-
allocate
-
withDefaultValue
-
withDefaultValue
-
withDefaultValue
-
withDefaultValue
-
withDefaultValue
-
withDefaultValue
-
withInitializer
- Parameters:
initializer- 初始化ScopeKey(仅在Scope有效时)等效代码:(调用
get()时)T obj = SCOPE_KEY.get(); if (obj == null) { obj = initializer.get(); SCOPE_KEY.set(obj); } return obj;注意,如果 initializer 返回
null,每次访问时都会重复初始化执行; 虽然该问题是预期外的,但是考虑到业务如果刚好依赖了此 bug,可能直接修复会产生行为异常,并因此产生不容易发现的意外,所以提供了重载版本修正: 对于可能返回null的场景,请使用withInitializer(boolean, Supplier)版本,并传递参数true
-
withInitializer
-
get
-
set
- Returns:
trueif in a scope and set success.
-