打字猴:1.700475174e+09
1700475174 public void setLocation(String location){
1700475175
1700475176 this.location=location;
1700475177
1700475178 }
1700475179
1700475180 @Override
1700475181
1700475182 public boolean equals(Object obj){
1700475183
1700475184 if(obj instanceof ExtrinsicState){
1700475185
1700475186 ExtrinsicState state=(ExtrinsicState)obj;
1700475187
1700475188 return state.getLocation().equals(location)&& state.getSubject().equals(subject);
1700475189
1700475190 }
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
[ 上一页 ]  [ :1.700475174e+09 ]  [ 下一页 ]