java annotation 中 SOURCE 和 CLASS 的区别

小编 244

java annotation中SOURCE和CLASS的区别:1.有效性不同;2.使用人不同;3.使用场景不同。有效性不同是指,SOURCE是在源文件中有效,编译器直接丢弃这种策略的注释;而CLASS是在Class文件中有效,当运行Java程序时,JVM不会保留注解。

1.有效性不同

SOURCE是在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释;而CLASS是在Class文件中有效(即class保留),当运行Java程序时,JVM不会保留注解,即可能会被虚拟机忽略。

2.使用人不同

RetentionPolicy.SOURCE仅仅是给应用层开发人员用的;而RetentionPolicy.CLASS 需要应用层和底层系统开发人员配合使用的。

3.使用场景不同

RetentionPolicy.SOURCE主要用于在本编译单元内触发注解处理器的相关处理,例如说可以让注解处理器相应地生成一些代码,或者是让注解处理器做一些额外的类型检查,等等。

RetentionPolicy.CLASS在编译的过程中保留并且会写入Class文件中,但是JVM在加载类的时候不需要将其加载为运行时可见的(反射可见)的注解。这里很重要的一点是编译多个Java文件时的情况:假如要编译A.java源码文件和B.class文件,其中A类依赖B类,并且B类上有些注解希望让A.java编译时能看到,那么B.class里就必须要持有这些注解信息才行。

延伸阅读

java annotation是什么

java annotation是JDK5.0引入的一种注释机制。annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证、处理或者进行部署。

annotation提供了一种为程序元素(包、类、构造器、方法、成员变量、参数、局域变量)设置元数据的方法。annotation不能运行,它只有成员变量,没有方法。annotation跟public、final等修饰符的地位一样,都是程序元素的一部分,annotation不能作为一个程序元素使用。

注解的意义在于:名列前茅,annotation可以为编译器提供而外信息,以便于检测错误,抑制警告等;第二,软件工具可以通过处理Annotation信息来生成原代码,xml文件等等;第三,有一些annotation甚至可以在程序运行时被检测、使用。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部