【问题标题】:How to use an annotation to replace code in Java?如何使用注解替换 Java 中的代码?
【发布时间】:2014-05-14 18:25:19
【问题描述】:

我希望能够处理预构建的 java 项目,以便我可以找到所有注释,例如 @Getter,并将它们替换为分配字段的实际 getter 语句。

@Getter String s = "string";

我基本上想做“龙目岛计划”所做的事情,但我想自己做,学习并简化它以满足我的需要。

问题是,我不知道从哪里开始。我已经搜索并没有发现任何用处,并且也尝试过自己,但没有运气。我希望它在 eclipse 构建上运行,所以 jar 是自动正确的。我也想创建它,所以当我将注释插入到 java 文件中时,它不会显示为错误,我假设我可以使用依赖项来解决这个问题。

就经验而言,我知道如何使用和创建注释,但仅用于存储元数据,而不是用作占位符。

如果您有任何提示或知道任何资源可以帮助我解决此问题,我将不胜感激。

附:我已经查看了 Project Lombok 的源代码,但它过于庞大,无法找到需要做的事情。

【问题讨论】:

  • 这篇关于 Java 注释的维基百科文章应该会有所帮助:en.wikipedia.org/wiki/Java_annotation
  • 普斯的回答是对的。注释处理器应该编写一个新文件,而不是修改现有类。 Lombok 所做的事情非常复杂且难以理解,但这只是因为没有简单的方法。

标签: java eclipse annotations lombok


【解决方案1】:

AFAIK Lombok 在注释处理器中进行了一些 AST 操作(不是 100% 确定),规范并未正式支持。因此,它更像是克服 Java 语言中的一些缺点的 hack。

【讨论】:

  • 这是 100% 正确的(对于 javac,Eclipse 是另一回事)。使用注释处理器正式不可能修改现有代码。全面披露:我是 Project Lombok 的核心开发人员之一。
【解决方案2】:

这很简单。首先,您需要将 lombok.jar 附加到您的项目。
右键单击您的项目并转到属性。附加外部罐子/库。现在导入以下内容:-

import lombok.Getter;
import lombok.Setter;
import lombok.AccessLevel;
// and so on....

现在您可以按如下方式使用@Getter @Setter:-

@Getter @Setter private Car car;

现在您可以使用 getCar() 和 setCar(...)
注意:- 您可能需要为 NetBeans 启用注释处理。不要问我怎么做。只需谷歌它或访问龙目岛的网站。

【讨论】:

  • 如果您阅读我的问题,您会看到我在问如何自己做这件事,并以 lombok 为例,而不是想知道如何使用它...
【解决方案3】:

您需要编写一个自定义注释处理器。

基本上,您将在最终编译步骤之前搜索注释并将自定义代码添加到生成的类文件中。

您的处理器需要实现javax.annotation.processing.Processor 来处理您的注释。我以前为 NetBeans 做过这个,并使用了几年前的一篇好文章作为指导 http://deors.wordpress.com/2011/10/08/annotation-processors/

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多