urlyy commented on issue #1744:
URL: https://github.com/apache/fury/issues/1744#issuecomment-2241734857

   Excuse me, I didn't understand the issue requirement , do you mean that in 
code below, we should not invoke the `copyObject`'s `getClassInfo` , but 
instead cache a final `info` instance in Serializer instance? Is this enough?
   ```java
   Map newMap = fury.copy(oldMap);
   
   @Override
   public T copy(T originMap) {
     ......
     copyEntry(originMap, newMap);
     return onMapCopy(newMap);
   }
   
   protected <K, V> void copyEntry(Map<K, V> originMap, Map<K, V> newMap) {
     ++ ClassInfo keyClassInfo= 
classResolver.getOrUpdateClassInfo(entry.getKey().getClass());
     ++ ClassInfo valueClassInfo= 
classResolver.getOrUpdateClassInfo(entry.getValue().getClass());
     for (Map.Entry<K, V> entry : originMap.entrySet()) {
        -- newMap.put(fury.copyObject(entry.getKey()), 
fury.copyObject(entry.getValue()));
        ++ newMap.put(fury.copyObject(entry.getKey(),keyClassInfo), 
fury.copyObject(entry.getValue(), valueClassInfo));
     }
   }
   
   
   -- public <T> T copyObject(T ob) {
   // We can add a new method with additional parameter classInfo
   ++ public <T> T copyObject(T obj, ClassInfo classInfo) {
       if (obj == null) {
         return null;
       }
       Object copy;
       -- ClassInfo classInfo = 
classResolver.getOrUpdateClassInfo(obj.getClass());
       switch (classInfo.getClassId()) {
         case ClassResolver.PRIMITIVE_BOOLEAN_CLASS_ID:
         case ClassResolver.PRIMITIVE_BYTE_CLASS_ID:
         case ClassResolver.PRIMITIVE_CHAR_CLASS_ID:
         case ClassResolver.PRIMITIVE_SHORT_CLASS_ID:
         case ClassResolver.PRIMITIVE_INT_CLASS_ID:
         case ClassResolver.PRIMITIVE_FLOAT_CLASS_ID:
         case ClassResolver.PRIMITIVE_LONG_CLASS_ID:
         case ClassResolver.PRIMITIVE_DOUBLE_CLASS_ID:
         case ClassResolver.BOOLEAN_CLASS_ID:
         case ClassResolver.BYTE_CLASS_ID:
         case ClassResolver.CHAR_CLASS_ID:
         case ClassResolver.SHORT_CLASS_ID:
         case ClassResolver.INTEGER_CLASS_ID:
         case ClassResolver.FLOAT_CLASS_ID:
         case ClassResolver.LONG_CLASS_ID:
         case ClassResolver.DOUBLE_CLASS_ID:
         case ClassResolver.STRING_CLASS_ID:
           return obj;
         case ClassResolver.PRIMITIVE_BOOLEAN_ARRAY_CLASS_ID:
           boolean[] boolArr = (boolean[]) obj;
           return (T) Arrays.copyOf(boolArr, boolArr.length);
         ......
         case ClassResolver.ARRAYLIST_CLASS_ID:
           copy = arrayListSerializer.copy((ArrayList) obj);
           break;
         case ClassResolver.HASHMAP_CLASS_ID:
           copy = hashMapSerializer.copy((HashMap) obj);
           break;
           // todo: add fastpath for other types.
         default:
           copyDepth++;
           copy = classInfo.getSerializer().copy(obj);
           copyDepth--;
       }
       return (T) copy;
     }
   
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to