Live2D

java注解

java注解解读

java注解元注解

用于注解自定义注解的注解,包含一下几个

@Target 作用范围
@Retention 注解生命周期
@Inherited 遗传,能被继承
@Documented 文档,用javac编译时会有相应信息
@Repeatable 没有被@Repeatable修饰的注解在同一位置只能出现一次(jdk1.8新增)

@Target

注解使用的范围

ElementType.TYPE:能修饰类、接口或枚举类型
ElementType.FIELD:能修饰成员变量
ElementType.METHOD:能修饰方法
ElementType.PARAMETER:能修饰参数
ElementType.CONSTRUCTOR:能修饰构造器
ElementType.LOCAL_VARIABLE:能修饰局部变量
ElementType.ANNOTATION_TYPE:能修饰注解
ElementType.PACKAGE:能修饰包

@Retention

注解生命存活范围

RetentionPolicy.SOURCE: 注解只在源代码中存在,编译成class之后,就没了。@Override 就是这种注解。
RetentionPolicy.CLASS: 注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。@Retention的默认值,即当没有显式指定@Retention的时候,就会是这种类型。
RetentionPolicy.RUNTIME: 注解在运行起来之后依然存在,程序可以通过反射获取这些信息

@Inherited

当注解被@Inherited修饰表示此注解可以被继承。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
}
@MyAnnotation
public class A {
}
//B类也有@MyAnnotation注解
class B extends A {}

@Documented

当注解被@Documented注解修饰后,在用javac命令生成API文档后,文档里会出现该注解的说明

@Repeatable

使用 @Repeatable 注解的注解可以在同一位置使用
创建一个未被@Repeatable 注解的@MyAnnotation注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
    String value() default "";
}
@MyAnnotation("A")
@MyAnnotation("B")
public class A {
}

在类上重复使用时报错

创建@MyAnnotations注解,值类型为MyAnnotation数组。@MyAnnotations注解的target范围要比@MyAnnotation中的范围大

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotations {
    MyAnnotation[] value() default {};
}

在@MyAnnotation注解上添加@Repeatable(MyAnnotations.class)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {
    String value() default "";
}
@MyAnnotation("A")
@MyAnnotation("B")
public class A {
}

A类上的报错消失

posted @   芜湖~起飞~  阅读(2)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示