-
Notifications
You must be signed in to change notification settings - Fork 22
order 属性详解
ray.zh edited this page Apr 21, 2023
·
3 revisions
结构体字段中的 order
属性声明顺序将会是实际段序列化顺序。该字段存在有以下意义:
- 显示声明可以避免随意字段顺序调整而造成的异常问题,通常显示申明更容易发现并定位问题
- 也是最重要的一点,java 反射获取的字段是不保证顺序的,这一点在jdk文档中有说明。具体参阅:
- https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getFields--
- https://stackoverflow.com/questions/5001172/java-reflection-getting-fields-and-methods-in-declaration-order
所以这里值得区一提的是, ordre 声明顺序 不一定等于字段定义顺序。
事实上框架在解析完所有字段后,将会再将所有字段按照order
进行重新排序
所以最佳实践是:
虽然 order
要求递增,但却是不必要求严格的 increment.
如以下定义:
@MagicClass()
public class Student {
@MagicField(order = 1, size = 10)
private String name;
@MagicField(order = 3)
private long phone;
@MagicField(order = 5, size = 3)
private int[] bookids;
// getter setter...
}
这里字段之间的order
进行了间隔, 如 1, 3, 5, 7, 9。这样方便后期协议修改或者大字段拆分时使用。
若大家在使用过程中有疑问,可以参考右边的目录列表进行查询