根据Kotlin 语言规范,注释保留分为三种类型:
- 源保留(可通过源处理工具访问);
- 二进制保留(保留在编译工件中);
- 运行时保留(在运行时可访问)。
查看 JVM 上 kotlin-stdlib 的 KDoc,我们得到以下内容:
public enum class AnnotationRetention {
/** Annotation isn't stored in binary output */
SOURCE,
/** Annotation is stored in binary output, but invisible for reflection */
BINARY,
/** Annotation is stored in binary output and visible for reflection (default retention) */
RUNTIME
}
Run Code Online (Sandbox Code Playgroud)
我可以理解SOURCE
(可用于注释处理器检查)和RUNTIME
(可用于使用反射检查)的用例,但我无法理解BINARY
.
有人可以解释一下这种类型保留的用例吗?如果不需要的话我为什么要选择BINARY
呢?SOURCE
RUNTIME
Dav*_*son 11
根据Alexey Romanov的评论,在注释处理和运行时反射之外有一个注释用例,这在Java 注释的答案中显示 - 寻找 RetentionPolicy.CLASS 的示例
例如,Proguard 获取.jar
文件并对它们执行混淆和收缩,如下图Proguard 网站所示:
该@Keep
注释告诉 Proguard 在收缩期间不要删除目标。由于 Proguard 对文件进行操作,因此这种注释必须存在于二进制文件中.jar
。由于@Keep
不打算在运行时使用反射进行检查,因此它是AnnotationRetention.BINARY
.
归档时间: |
|
查看次数: |
2905 次 |
最近记录: |