1700475167
1700475168
public String getLocation(){
1700475169
1700475170
return location;
1700475171
1700475172
}
1700475173
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
//池容器
[
上一页 ]
[ :1.700475167e+09 ]
[
下一页 ]