为什么@Target注解被@Retention(RetentionPolicy.RUNTIME)注解修饰

为什么@Target注解被@Retention(RetentionPolicy.RUNTIME)注解修饰

为什么@Target注解被@Retention(RetentionPolicy.RUNTIME)注解修饰,@Target被@Retention(RetentionPolicy.SOURCE)注解修饰不就够了吗,@Target不是编译时检查吗?


@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation interface
     * can be applied to.
     * @return an array of the kinds of elements an annotation interface
     * can be applied to
     */
    ElementType[] value();
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2023-08-28 09:22:03

同学你好,@Target不是编译时检查,两个注解含义是不同的,@Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错。而@Retention是用来修饰注解的,注解的注解。

祝学习愉快!

  • 提问者 书山压力大123 #1

    我的意思是@Target不是编译时检查注解作用范围是否正确吗,那只要在源码阶段保留不就够了。为什么它保留到了运行时。@Target是被@Retention(RetentionPolicy.RUNTIME)修饰的,为什么不是@Retention(RetentionPolicy.SOURCE)

    2023-08-28 10:02:25
  • 同学你好,1、@Targe注解是编译时检查。

    2、@Retention注解用于指定注解的生命周期,它的作用是告诉编译器和JVM在何时保留注解。

        @Retention(RetentionPolicy.RUNTIME)时,表示该注解将在class文件中保留,并且在运行时仍然可见。这意味着我们可以在运行时通过反射来获取和使用这个注解。

    3、Targe接口为什么设置为RetentionPolicy.RUNTIME,是因我们在自定义接口时需要使用@Targe注解如果Targe接口设置为编译不保留,则我们自定义注解时无法确保@Targe注解可以被访问和使用。

    祝学习愉快!

    2023-08-28 14:04:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师