使用CodeModel,有没有办法控制修饰符的顺序? 特别是在创建字段时。
CodeModel 似乎有自己的修饰符顺序定义,这与 Java 语言规范以及 SonarQube 和 CheckStyle 等产品的定义不同:
https://sonar43.spring.io/rules/show/squid:ModifiersOrderCheck?layout=false http://checkstyle.sourceforge.net/config_modifier.html
修饰符应按以下顺序出现:
- 注释
- 公开
- protected
- 私有(private)
- 摘要
- 静态
- final
- 短暂
- 不稳定
- 已同步
- 本地人
- 严格fp
此示例代码:
// 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;
最佳答案
这是不可能的*。即使是令人讨厌的反射黑客也无法做到这一点。修饰符的顺序由 JMods#generate(JFormatter)
确定方法(在底部)。不幸的是,JMods
类只有一个显式声明为 private
的构造函数。
*当然,您可以添加另一层检测、字节码汇编或类似的层,或者只是创建 CodeModel 的修改版本以供本地使用。但没有非侵入性的方法来更改修饰符顺序。
关于java - CodeModel 修饰符顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005314/