CodeModel修饰符顺序

时间:2016-05-03 13:18:51

标签: java sonarqube modifier

使用CodeModel,有没有办法控制修饰符的顺序? 特别是在创建字段时。

CodeModel似乎拥有它自己的修饰符顺序定义,它不同于Java语言规范和SonarQube和CheckStyle等产品:

https://sonar43.spring.io/rules/show/squid:ModifiersOrderCheck?layout=false http://checkstyle.sourceforge.net/config_modifier.html

修饰符应按以下顺序出现:

  1. 注解
  2. 公共
  3. 保护
  4. 私有
  5. 抽象
  6. 静态
  7. 最终
  8. 瞬态
  9. 易失性
  10. 同步
  11. 天然
  12. strictfp
  13. 此示例代码:

    // Create field for serialVersionUID
    JFieldVar field1 = newClass.field(JMod.PRIVATE | JMod.STATIC | JMod.FINAL, long.class, "serialVersionUID");
    field1.init(JExpr.lit(1L));
    

    生成以下不遵循建议顺序的修饰符:

    private final static long serialVersionUID = 1L;
    

1 个答案:

答案 0 :(得分:0)

这是不可能的*。甚至不讨厌的反射黑客也会这样做。修饰符的顺序由JMods#generate(JFormatter)方法确定(在底部)。不幸的是,JMods类只有一个显式声明为private的构造函数。

* 当然,您可以添加另一层检测,字节码组装或类似,或者只是创建一个CodeModel的修改版本供本地使用。但是没有改变修饰符顺序的非侵入式方法。