例如,javax.annotation.Generate 旨在标记生成的代码,但它很少有用。由于AFAIK处理字节码的工具比处理源的工具多,因此信息在可以使用之前就消失了。
看看源代码编辑器,从JetBrains派生的Android Studio和许多其他IDE,需要处理源代码,它提供了所有出色的编辑体验,只是因为编译时注释。
在编辑类(尚未编译)时,编辑器可以存储和处理批注。
例:
@SuppressWarnings
让我们抑制警告,否则你怎么能这样做?C# 允许您定义 、 、 某种条件编译。任何条件编译信息都不会存储在已编译的输出中。#PRAGMA
#IF
@Override
允许Java编译器检查基类是否有要重写的方法,如果您使用错误的参数定义新方法,Java编译器将使用具有重载的新方法编译类,但是在存在java编译器的情况下,会给您一个错误,即签名不匹配以覆盖该方法。@Override
@GeneratedCode
允许 IDE 跳过在使用“查找和替换”进行搜索时要显示的类和成员,并且它允许您仅对代码而不是生成的代码操作 IDE。你有没有看过Android中的资源,这些生成的类隐藏在Android Studio中,但它们确实提供了有用的代码完成列表。R.*
同样,许多这样的注释允许您进行代码分析,编写单元测试等,并在编译之前对其进行更多工作。
这里还有更多
许多 ORM 框架使用编译时注释,并生成用于类型化查询和其他帮助器类的有用额外类,以创建表和维护架构。
结论
在上面显示的示例中,很明显,所有三个和许多这样的注释都将不必要地添加如此多的字节,这些字节在运行时完全无用。
Java有两个选项,一个是使用基于c的语言中使用的etc指令添加某种编译时注释。这将需要新的语法和新的编辑经验等,另一个是创建。在不破坏语法的情况下进行创建是一个很好的举动。#IF
Retention
Retention