Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

AltStyle によって変換されたページ (->オリジナル) /