我在NamedCache.get(cacheKey)
对象中使用NamedCache.put(cacheKey, cacheValue)
和hashCode
并覆盖equals
和cacheKey
方法,同时生成cacheKey
个对象序列化。但hashCode
和equals
方法无法调用。
为什么会这样?
我发布了上述问题的示例代码
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
class HelloEx implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6280029994647038136L;
String str = "HelloEx" ;
HelloEx(String s){
str = s ;
}
public int hashCode() {
System.out.println("Inside HashCode");
return 1;
}
public boolean equals(Object o) {
HelloEx s = (HelloEx)o ;
if(str.equals(s.str)){
System.out.println("Both are equal");
return true;
}
return false;
}
}
public class HashSetEg {
public static void main(String[] args) {
HelloEx hEx4 = new HelloEx("Four");
HelloEx hEx5 = new HelloEx("Five");
HelloEx hEx6 = new HelloEx("Six");
Map hp = new HashMap();
hp.put(hEx4,hEx4);
hp.put(hEx5,hEx5);
hp.put(hEx6,hEx6);
hp.put(hEx6,hEx6);
System.out.println("Test");
hp.get(hEx6);
hp.put(new String("aa"),new String("aa"));
System.out.println("Test");
//System.out.println("HashSet " + hp );
NamedCache aggCache = CacheFactory.getCache("MyCache");
aggCache.put(hEx4,hEx4);
aggCache.put(hEx6,hEx6);
aggCache.put(hEx6,hEx6);
System.out.println("End");
}
}
上述代码的输出是:
内部HashCode
内部HashCode
内部HashCode
内部HashCode
测试
内部HashCode
测试
结束
此代码使用的是oracle coherence技术。所以 NamedCache 是 coherence.jar 中的一个接口,用于保存coherence服务器上创建的缓存的引用。应用程序和" CacheFactory.getCache(" MyCache")"用于在名称为MyCache的coherence服务器上创建缓存,在此缓存中,我们存储键值对,就像我们在HashMap中存储数据一样