in java/fury-core/src/main/java/org/apache/fury/Fury.java [1379:1442]
public <T> T copyObject(T obj) {
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.PRIMITIVE_BYTE_ARRAY_CLASS_ID:
byte[] byteArr = (byte[]) obj;
return (T) Arrays.copyOf(byteArr, byteArr.length);
case ClassResolver.PRIMITIVE_CHAR_ARRAY_CLASS_ID:
char[] charArr = (char[]) obj;
return (T) Arrays.copyOf(charArr, charArr.length);
case ClassResolver.PRIMITIVE_SHORT_ARRAY_CLASS_ID:
short[] shortArr = (short[]) obj;
return (T) Arrays.copyOf(shortArr, shortArr.length);
case ClassResolver.PRIMITIVE_INT_ARRAY_CLASS_ID:
int[] intArr = (int[]) obj;
return (T) Arrays.copyOf(intArr, intArr.length);
case ClassResolver.PRIMITIVE_FLOAT_ARRAY_CLASS_ID:
float[] floatArr = (float[]) obj;
return (T) Arrays.copyOf(floatArr, floatArr.length);
case ClassResolver.PRIMITIVE_LONG_ARRAY_CLASS_ID:
long[] longArr = (long[]) obj;
return (T) Arrays.copyOf(longArr, longArr.length);
case ClassResolver.PRIMITIVE_DOUBLE_ARRAY_CLASS_ID:
double[] doubleArr = (double[]) obj;
return (T) Arrays.copyOf(doubleArr, doubleArr.length);
case ClassResolver.STRING_ARRAY_CLASS_ID:
String[] stringArr = (String[]) obj;
return (T) Arrays.copyOf(stringArr, stringArr.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:
copy = copyObject(obj, classInfo.getSerializer());
}
return (T) copy;
}