Skip to content

order 属性详解

ray.zh edited this page Apr 21, 2023 · 3 revisions

结构体字段中的 order 属性声明顺序将会是实际段序列化顺序。该字段存在有以下意义:

  1. 显示声明可以避免随意字段顺序调整而造成的异常问题,通常显示申明更容易发现并定位问题
  2. 也是最重要的一点,java 反射获取的字段是不保证顺序的,这一点在jdk文档中有说明。具体参阅:

所以这里值得区一提的是, 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。这样方便后期协议修改或者大字段拆分时使用。

Clone this wiki locally