如何在序列化对象中覆盖hashCode和equals方法?

时间:2016-06-16 20:55:42

标签: java oracle-coherence

我在NamedCache.get(cacheKey)对象中使用NamedCache.put(cacheKey, cacheValue)hashCode并覆盖equalscacheKey方法,同时生成cacheKey个对象序列化。但hashCodeequals方法无法调用。

为什么会这样?

我发布了上述问题的示例代码

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中存储数据一样

1 个答案:

答案 0 :(得分:0)

据我所知this文章,NamedCache在您致电hashCode时未致电put

而且,根据文章,您必须注意hashCodeequals的实施方式。