2016-06-16 5 views
-2

Я использую NamedCache.get(cacheKey) и NamedCache.put(cacheKey, cacheValue) и первостепенную hashCode и equals метод в cacheKey объекта, также делает cacheKey объект Serializable. Но метод hashCode и equals не вызван.Как переопределить методы 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

Тест

Конец

Этот код использует когерентности оракула technology.So NamedCache представляет собой интерфейс внутри coherence.jar, который используется для сохраните ссылку на созданный кеш на сервере когерентности, который будет использоваться приложением, и «CacheFactory.getCache (« MyC боль «)» используется для создания кэша на когерентной сервере с именем MyCache и в этом кэше мы храним пар ключ-значение так же, как мы храним данные в HashMap

+0

Не могли бы вы высказать свой код? – MoondogsMaDawg

+0

Я боюсь, что я не могу опубликовать фактический код здесь. Как на моих клиентах VM (недоступен отсюда). – Rajnish

+4

вы наверняка можете. Создайте [mcve] (/ help/mcve) и вставьте это (убедитесь, что это действительно mcve). Важно то, что вы прилагаете все усилия, чтобы четко объяснить, что вы делаете, что в этом случае * очень важно * включить код, даже если это не буквально код, который у вас есть, - пока он проявляет ту же проблему что вам нужно решить после сокращения. –

ответ

0

Насколько я понял из this статьи, NamedCache не позвонить по телефону hashCode при звонке по телефону put.

И, в соответствии с этой статьей, вы должны обратить внимание на то, как реализованы hashCode и equals.

+0

Прошу прощения, но это не помогло. Я не получил вашу вторую строку – Rajnish

+0

@RaJnish, вы прочитали статью? Все поля сериализации (непереходные) в ключевом классе должны использоваться в реализации равных значений.И hashCode не вызывается на put, и вы точно показываете, что – jny

+0

Нет, не могли бы вы предоставить мне ссылку на эту статью. – Rajnish