-
-
Notifications
You must be signed in to change notification settings - Fork 302
/
DevVariableExt.java
110 lines (96 loc) · 2.33 KB
/
DevVariableExt.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package dev.base;
/**
* detail: 变量操作基类扩展类
* @author Ttt
* <pre>
* {@link DevVariable} 变量操作基类基础上进行扩展
* 支持通过接口方式进行创建存储值
* </pre>
*/
public class DevVariableExt<K, V, P> {
// 变量操作基类
private final DevVariable<K, V> mVariable = new DevVariable<>();
// 变量创建器
private Creator<K, V, P> mCreator = null;
// ==========
// = 构造函数 =
// ==========
public DevVariableExt() {
}
public DevVariableExt(final Creator<K, V, P> creator) {
this.mCreator = creator;
}
// ========
// = 创建器 =
// ========
/**
* detail: 变量创建器
* @author Ttt
*/
public interface Creator<K, V, P> {
/**
* 创建存储值
* @param key 存储 key
* @param param 额外参数
* @return 存储值
*/
V create(
K key,
P param
);
}
/**
* 获取变量创建器
* @return {@link Creator}
*/
public Creator<K, V, P> getCreator() {
return mCreator;
}
/**
* 设置变量创建器
* @param creator {@link Creator}
* @return {@link DevVariableExt}
*/
public DevVariableExt<K, V, P> setCreator(final Creator<K, V, P> creator) {
this.mCreator = creator;
return this;
}
// =============
// = 对外公开方法 =
// =============
/**
* 获取变量操作基类
* @return {@link DevVariable}
*/
public DevVariable<K, V> getVariable() {
return mVariable;
}
/**
* 通过 key 获取 value
* @param key Key
* @return Value
*/
public V getVariableValue(final K key) {
return getVariableValue(key, null);
}
/**
* 通过 key 获取 value
* @param key Key
* @param param 额外参数
* @return Value
*/
public V getVariableValue(
final K key,
final P param
) {
V value = mVariable.getVariableValue(key);
if (value != null) return value;
if (mCreator != null) {
value = mCreator.create(key, param);
if (value != null) {
mVariable.putVariable(key, value);
}
}
return value;
}
}