public final class AnyIdentity extends Object implements IIdentity
有时候多个类共同承载业务身份/特征,而为此定义一个业务身份类来容纳这些类时,可能很难从模型上定义这个类是什么.
例如,订单和任务在一起才能用于判断业务身份
class MyIdentity implements IIdentity {
final Task task;
final Order order;
public MyIdentity(Task task, Order order) {}
}
为了解决这个问题,我们提供了通用万能的AnyIdentity
,不必为此边缘场景额外定义新的业务身份类:
IIdentity identity = AnyIdentity.newIdentity();
identity.put("task", task).put("order", order);
Task task = identity.get("task", Task.class);
AnyIdentity
牺牲了业务语义,换来了通用性.
限定符和类型 | 方法和说明 |
---|---|
<T> T |
get(@NonNull String key,
@NonNull Class<T> valueType)
指定value类型获取对应key的值。
|
static AnyIdentity |
newIdentity()
创建一个新的业务身份实例.
|
AnyIdentity |
put(@NonNull String key,
Object value)
根据key暂存值.
|
public static AnyIdentity newIdentity()
public AnyIdentity put(@NonNull @NonNull String key, Object value)
由于AnyIdentity
仅用于扩展点路由的手递手信息传递,作用域小,因此key
的命名不必特别严格,也不必解决magic number
问题.
public <T> T get(@NonNull @NonNull String key, @NonNull @NonNull Class<T> valueType) throws ClassCastException
T
- key
- key namevalueType
- value typeClassCastException
- 如果指定的value类型错了Copyright © 2020–2023. All rights reserved.