MisterChangRay / magic-byte

a java tool for faster convertor byte2object
BSD 3-Clause "New" or "Revised" License
49 stars 20 forks source link

如果 dynamicsizeof 指向的属性名重名了,会导致序列化结果错误 #46

Closed FULaBUla closed 10 months ago

FULaBUla commented 10 months ago

如果我的属性和内部类属性都有一个叫 length 的字段,在使用的时候就会导致序列化的时候只序列化了 length 字段,他标记的字段就不会被序列化
代码示例如下:

@MagicClass
class A {

@MagicField(order = 1)
private int length;

@MagicField(order = 2, dynamicSizeOf = "length")
private String value;

@MagicField(order = 3)
private int dataLength;

@MagicField(order = 4, dynamicSizeOf = "dataLength")
private List<B> data;

@MagicClass
public static class B {

@MagicField(order = 1)
private int length;

@MagicField(order = 2, dynamicSizeOf = "length")
private byte[] data;
}

}

这个在 2.4.0 之前的实现是不会出问题的,换成 2.4.0 之后才出的问题。导致我序列化的时候 length 序列化完了就直接跳到 dataLength 了(但是 length 的值是对的),没有序列化 value 的内容,当我把两个 length 属性的名字改成不一样的之后问题就解决了