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