对象的属性在序列化输出的时候,如果序列化的属性类型就是属性定义的类型本身,则按照 final 类型的输出办法来处理

master
linbin 2024-09-10 03:17:54 +08:00
parent 5862c362f3
commit ab14e5b94d
1 changed files with 25 additions and 2 deletions

View File

@ -13,12 +13,21 @@ public class VariableFieldInfo extends FieldInfo
{
private final JfireSEImpl jfireSE;
private ClassInfo classInfo;
private final ClassInfo firstClassInfo;
public VariableFieldInfo(Field field, JfireSEImpl jfireSE)
{
super(ReflectUtil.getClassId(field.getType()), new ValueAccessor(field));
classInfo = jfireSE.getForSerialize(field.getType());
this.jfireSE = jfireSE;
if (field.getType().isInterface())
{
firstClassInfo = null;
}
else
{
firstClassInfo = classInfo;
}
}
@Override
@ -34,12 +43,26 @@ public class VariableFieldInfo extends FieldInfo
Class<?> objClass = obj.getClass();
if (objClass == classInfo.getClazz())
{
classInfo.write(byteArray, obj);
if (classInfo == firstClassInfo)
{
classInfo.writeKnownClazz(byteArray, obj);
}
else
{
classInfo.write(byteArray, obj);
}
}
else
{
classInfo = jfireSE.getForSerialize(objClass);
classInfo.write(byteArray, instance);
if (classInfo == firstClassInfo)
{
classInfo.writeKnownClazz(byteArray, obj);
}
else
{
classInfo.write(byteArray, obj);
}
}
}
}