打字猴:1.700475191e+09
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 ]  [ 下一页 ]