1700475191
1700475192
return false;
1700475193
1700475194
}
1700475195
1700475196
@Override
1700475197
1700475198
public int hashCode(){
1700475199
1700475200
return subject.hashCode()+location.hashCode();
1700475201
1700475202
}
1700475203
1700475204
}
1700475205
1700475206
注意,一定要覆写equals和hashCode方法,否则它作为HashMap中的key值是根本没有意义的,只有hashCode值相等,并且equals返回结果为true,两个对象才相等,也只有在这种情况下才有可能从对象池中查找获得对象。
1700475207
1700475208
注意 如果把一个对象作为Map类的键值,一定要确保重写了equals和hashCode方法,否则会出现通过键值搜索失败的情况,例如map.get(object)、map.contains(object)等会返回失败的结果。
1700475209
1700475210
SignInfo的修改较小,仅在SignInfo中引入该ExtrinsicState外部状态对象,在此不再赘述。我们在来看享元工厂,它是以ExtrinsicState类作为外部状态,如代码清单28-14所示。
1700475211
1700475212
代码清单28-14 享元工厂
1700475213
1700475214
public class SignInfoFactory{
1700475215
1700475216
//池容器
1700475217
1700475218
private static HashMap<ExtrinsicState,SignInfo>pool=new HashMap
1700475219
1700475220
<ExtrinsicState,SignInfo>();
1700475221
1700475222
//从池中获得对象
1700475223
1700475224
public static SignInfo getSignInfo(ExtrinsicState key){
1700475225
1700475226
//设置返回对象
1700475227
1700475228
SignInfo result=null;
1700475229
1700475230
//池中没有该对象,则建立,并放入池中
1700475231
1700475232
if(!pool.containsKey(key)){
1700475233
1700475234
result=new SignInfo();
1700475235
1700475236
pool.put(key,result);
1700475237
1700475238
}else{
1700475239
1700475240
result=pool.get(key);
[
上一页 ]
[ :1.700475191e+09 ]
[
下一页 ]