如何在Java中构建时使用注释动态生成代码?

Ste*_*han 23 java annotations generated-code

我正在寻找生成代码的解决方案.我用谷歌搜索,搜索SO和一些博客,但我找不到一个好的解决方案.

我想在我的类上添加一个注释,在编译时,一些方法和属性会自动添加到类中.

我正在寻找的解决方案的关键点:

  • 生成的代码可自定义(强制)
  • 没有apt必要调用外部工具(强制)
  • 仅限JDK,没有第三方框架(MANDATORY OPTIONAL)
  • 注释名称可自定义(可选)

例如 :

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}
Run Code Online (Sandbox Code Playgroud)

编译后我的类看起来像这样:

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
最后,我将我的第三个要求从MANDATORY转为OPTIONAL并选择了项目Lombok(与Maven和Eclipse轻松集成,几乎没有工作要做).

kap*_*pex 14

自1.6版以来,注释处理工具已集成在javac中,并且是JDK的一部分.因此,使用Pluggable Annotation API时无需外部工具.您可以使用Mirror API分析自定义注释或方法/参数/字段/类声明来生成任何代码.

您不能/不应该更改现有的类.可以通过创建子类来生成扩展方法.


jac*_*bit 12

看看龙目岛项目.它会在您编写时按照您的要求生成代码:

public class MyClass {
  @Getter @Setter private String alias;
}
Run Code Online (Sandbox Code Playgroud)

如果你需要它还可以做更多的事情.我知道你没有要求外部工具,但你基本上会重新创建它.

  • @Terel确实如此,但是除了OP之外,还会有更多的人(比如你自己)阅读这个答案。也许他们会发现它很有用。 (3认同)