我目前正在构建一个API,我将要求许多开发人员使用。大部分都是直截了当的,但是有一些api调用本质上是复杂的,但应该以非常类似的方式使用。
我想要做的是在类中生成样板代码,可能通过标记一些注释,但那些生成的方法在Eclipse / IntelliJ中可供开发人员查看。我看了Javassist,但不确定运行时性质是一件好事。我宁愿采用编译时方法。
如果可能的话,我希望隐藏实现的代码(即我不希望开发人员尝试更改生成的方法的代码,因为它们将在重新编译时重写)。
这一切都是为了将处理的复杂性隐藏在开发人员和维护人员之外,并将其保留在核心框架代码中。
答案 0 :(得分:4)
这个问题分为两部分。首先,您希望开发人员可以使用 API ,而无需编写/公开样板实现。其次,您希望自动生成样板代码。
如果您愿意承认正在使用某个框架,则可以在不生成代码/字节码的情况下执行此操作:
另一方面,如果您不希望开发人员记住框架的存在,或者您需要样板实现来访问逻辑的内部,那么您需要进行代码生成/字节码操作
操作本身可以使用自定义类加载器完成,也可以在使用Java Agents进行初始类加载时完成。但是,如何让API可供开发人员使用?以下是一些想法:
使实现类成为抽象,并声明将生成样板代码的抽象方法。
编写样板文件方法的存根实现(即在void
方法中不执行任何操作;在所有其他方法中抛出RuntimeException
。)使用一些注释标记这些方法。
执行类似Google Web Toolkit的操作,并将样板方法声明为native
。这与标记方法abstract
类似,但允许您执行类final
之类的操作。
答案 1 :(得分:0)
Java编译器支持annotation processing。您可以编写own processors来生成注释所需的代码。