gpt4 book ai didi

java - Java注释处理器是否能够删除注释代码

转载 作者:行者123 更新时间:2023-12-02 01:29:37 25 4
gpt4 key购买 nike

众所周知,我们可以像 Lombook 项目中的人员一样使用自定义注释和 Java 注释处理器自动生成代码。但是我们可以从编译源中删除带注释的代码吗?

我尝试在网络上搜索它,但只出现“生成代码”主题和“如何使用一个注释生成服务器”的教程。当我寻找从产品应用程序“编译出”调试消息的方法时,我想到了这一点。我可以理解,拥有调试/测试和生产代码并不是一个好的做法,但有时需要保持简单。我想到了一些场景:

  1. 仅进行调试,在仅供开发人员使用的代码版本中使用的滞后代码可能具有不同的重要性级别,例如:
@Debug(0) void cpuLightFunction(){}
@Debug(100) void cpuHeavyFunction(){}

void doWork(){
cpuLightFunction();
cpuHeavyFunction();
}

在注释处理步骤中,我们可以使用一些选项来定义将编译的@Debug注释的最大级别。任何更高级别的 @Debug 的使用都会产生错误或警告,其方式与 @Deprecated

相同
  • 平台特定代码版本 - 创建仅在给定运行的自定义 @Platform(ANDROID) void doSomething()@Plaform(IOS) void doSomething 函数plaform 摆脱多态 void doSomething(AndroidPlatform)void doSomethingAndroid() 代码

  • 有部分代码是有条件编译的:

  • @Optional("NetworkStub")
    class NetworkStub{
    // ...
    }

    @Optional("PaymentStub")
    class PaymentStub{
    // ...
    }

    并且仅使用编译器/注释处理器选项来启用/禁用部分代码,例如 -AOptional="NetworkStub" 只会编译代码中与 NetworkStub 相关的代码并删除所有代码触摸PaymentStub。

    最佳答案

    您可以通过编写一个注释处理器来实现此目的,该处理器在编译期间、代码生成之前遍历并修改程序的 AST(抽象语法树)。

    这就是 Lombok 项目的工作原理。

    这个问题几乎与 How to write a Java annotation processor? 重复。 ,但该问题的公认答案表明这是不可能的,这实际上是错误的。

    关于java - Java注释处理器是否能够删除注释代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560005/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com